• AWS Route 53 도메인 20개 제한 해제

    AWS Route 53 도메인 20개 제한 해제

    도메인 기관이전을 열심히 하고 있었습니다.

    KSDOM -> AWS Route 53 이렇게 옮기는데 도메인 20개째부터 더이상 이전신청이 되지 않아 알아보니 AWS Route 53에서 제공하는 갯수가 20개더군요.

    그래서 오늘로써 그 제한을 해제신청했습니다. 여태 모르고 있었네요.

    https://us-east-1.console.aws.amazon.com/servicequotas/home?region=us-east-1#!/services/route53/quotas

    1000개로 늘려놓아야겠네요.

    여태 도메인 갯수 20개 제한 있는것도 모르고 있었는걸 보면 제가 그동안 얼마나 게을리 있었는지 알 수 있습니다.

    한국에 사이트 몇개 운영 하지 않을때에도 도메인이 100개 넘었는데 글로벌하게 확장하려면 최소 1000개 이상은 구입해야겠죠.

    그런 의미에서 매일마다 웹사이트 하나씩 만들어보도록 하겠습니다.

    AWS Route 53 도메인 20개 제한 해제 끝!

  • AWS Route 53 도메인 이전 갯수 제한 20개 늘리기

    AWS Route 53 도메인 이전 갯수 제한 20개 늘리기

    이번에 AWS Route 53 쪽으로 도메인을 이전을 많이 하게 되었습니다.

    처음에는 한개씩 이전하다보니 몰랐었는데.. Route 53 서비스도 도메인 이전 제한이 있더군요.

    그런데 다시 알아보니 AWS Route 53 도메인 한계치가 20개더군요. 즉 20개째까지 기관이전이 가능했고 21개부터 신청이 안된거였습니다.

    2개가 이미 이전상태로 대기중이라면 3번째 도메인은 대기상태가 아닌 아예 신청이 안됩니다.

    	
    죄송하지만 일부 도메인에 대한 도메인 이전 요청을 제출할 때 다음과 같은 오류가 발생했습니다.
    royalkeyword.net
    최대 허용 도메인 수에 도달했습니다. Route 53 대시보드에서 제한 증가를 요청할 수 있습니다.
    

    이렇게 진행 자체가 되지 않습니다.

    예전에 EC2 인스턴스도 5개 이상 구입할경우 탄력적 IP (고정아이피)를 6개째부터 사용할 수 없었죠.

    그때도 제한을 풀어서 20개까지 사용했었습니다.

    그 후로 라이트세일도 제한이 걸려있었고 이번에 또 Route 53 서비스에서 이전진행할때 2개까지만 되는군요.

    위처럼 2개를 10개로 아니면 그 이상으로 열어달라고 요청했습니다.

    지금은 2개가 진행중인 상태입니다.

    일단 제한이 늘어나기전에 2개 진행부터 되면 또 신청 할 수 있으니 진행은 빠르게 버튼 눌러가면서 진행하고 있습니다.

    .com 도메인과 .net 도메인은 국제도메인이라서 AWS Route 53 에서 관리할 수 있으며 각각 13달러 11달러라서 한국 업체에서 구입하는거랑 큰 차이도 없어서 그냥 AWS 에서 관리하기로 했습니다.

    도메인 이전이 완료되면 바로 DNS 서버 연결이 될 수 있도록 네임서버 세팅도 마무리 했습니다.

    IT 전문가는 암기 그리고 아는것이 중요한게 아니라 실전에 실제로 적용시키면서 시스템을 만들어 낼 수 있어야 합니다.

    도메인 20개 할당 제한 요청

    https://us-east-1.console.aws.amazon.com/servicequotas/home?region=us-east-1#!/services/route53/quotas

    오늘도 끝!

  • SSD 500기가 충분 가성비 따진다면 한창코퍼레이션 CLOUD SSD

    SSD 500기가 충분 가성비 따진다면 한창코퍼레이션 CLOUD SSD

    서버를 많이 만들고 구축하다보니 CPU, RAM, SSD, POWER, MAIN BOARDER 이렇게 부품을 수시로 구입합니다.

    RAM 메모리는 중국에서 대부분을 구입하고 있고 SSD도 중국에서 구입을 해 보니 한국보다는 1~2만원 정도 더 저렴하더군요.

    그런데!! SSD는 한국과 다른 부분이 있습니다.

    일단 중국에서 제조하는것은 국내 유통이랑 별반 차이가 없는데… 서비스 즉 AS가 안된다는 점에서는 한국에서 구입하는게 좋더군요. 중국은 일단 고장나면 알리라던지 아마존을 통해서만 AS를 받아야 하는데… 고장 났다는 증명을 하는 것이 너무 어렵습니다. 게다가 배송이 우편이라보니 내가 직접 반품처리하기 위해서 지정된 장소까지 가져가야 하는 수고로움이 생기더군요.

    물론 메모리도 고장나면 비슷한 경우가 되겠지만 이상하게 아직까지 메모리는 고장이 단 1건도 없습니다.

    SSD는 특히 M.2(Nvme) 모델은 수시로 고장이 나더군요. 아직 2.5인치 SATA 모델에서는 고장이 없습니다.

    알리에서는 아래 모델은 구입하면 대략 2.5만원 선에 512GB를 구입할 수 있지만 AS에 대한 보장은 기대하지 않아야 합니다.

    AS는 당연히 1년~ 3년 이렇게 해 준다고 적혀있지만 실제로 AS받기란 하늘의 별따기 수준으로 어렵습니다.

    고장에 대한 확실한 증빙 동영상을 제출하고 또 고가의 제품이라면 반송까지 해야 하므로 한국스타일은 아니죠.

    그에 비해서 8천원 정도 더 돈을 지불하면 AS도 완벽하고 고장에 대한 부담을 3년동안 하지 않아도 되는 모델이 있죠.

    그때 개당 3만원 넘게 구입을 했는데.. 지금 512GB 가격이 3만원 조금 넘더군요. 이런… ㅎㅎ

    그래서 512GB 한창코퍼레이션 CLOUD SSD 모델을 추가로 5개 더 주문했습니다.

    저처럼 쿠팡에서 할인할 때 구입하시면 조금 더 저렴하게 구입하실 수 있을겁니다.

    [a]500gbssd[/a]

    굳이 1TB SSD를 구입하지 않는 이유는… 곧 SSD 가격 하락이 있기때문입니다.

    1TB 가격이 곧 3만원대로 떨어지게되므로 그냥 512GB 3만원주고 구입해서 사용하다가 내년쯤 3만원 더 주고 1TB 하나 더 구입하면 됩니다. 혹시 모르죠 2TB SSD 금액이 3만원대가 될지를…. 요즘 14TB HDD 용량이 20만원도 안하고 게다가 QLC 모델로 대용량이 저렴하게 풀리다보니 2TB SSD를 5만원에 구입하는 날은 머지 않은듯합니다.

    7년전에 삼성 2TB SSD 구입할때 80만원 조금 더 지불했던 기억이 있네요.

    요즘 2TB SSD 해봐야 10만원~20만원 정도면 구입합니다.

    7년전에 대용량을 구입해서 사용하긴 했지만 지금와서 생각해보면 그냥 512GB 20만원짜리 구입해서 버티다가 지금 2TB 구입했다면 60만원을 아낄 수 있었는데 라는 생각도 들더군요.

    지금은 가성비 가장 좋은 512GB SSD 구입해서사용하다가 1년 후쯤에 같은 3만원 내고 1TB 혹은 2TB SSD 구입하면 됩니다.

    바로 지르죠~ GoGo!

  • MYSQL DB 데이터베이스 용량 줄이기

    MYSQL DB 데이터베이스 용량 줄이기

    매월 늘어나는 빅데이터로 인해서 MySQL DB 용량은 점점 늘어나고 있습니다.

    7년전에 이미 예상했던 부분이기에 크게 놀랍지는 않습니다.

    그 당시 월단위로 20GB씩 늘어났었으며 1년에 240GB를 사용할 경우 10년에 2400GB를 확보하면 된다는 마인드로 2TB SSD를 구입하여 사용해왔습니다.

    2TB SSD를 이용할 경우 대략 10년 정도 버틸 수 있다 생각했었죠.

    실제로 용량은 그보다 더 많이 늘어났습니다.

    이미 쌓인 DB를 바탕으로 더 많은 수집 정보로 인해서 용량은 거대해지게 되었죠.

    안되겠다 싶어서 MySQL OPTIMIZE 등등 다 해보았지만 근본적으로 물리용량까지 줄일 수는 없었습니다.

    지금은 아래 테이블을 보시다싶이 1개월 단위로 용량이 눈에 띄일 정도로 많이 줄어든 상태입니다.

    제가 사용한 방법은 INDEX를 없애버린겁니다.

    인덱스가 사라지니깐 속도는 느리지만 더 많은 용량을 확보하여 하드웨어 비용적인 부분에서 절약이 많이 되었습니다.

    20GB -> 2GB로 확 줄어버리니 10년의 기간이 100년으로 늘어나게 된거죠.

    대신 어떤 데이터를 찾을 때 매우 느리다는것만 감안한다면 뭐 그리 큰 문제는 아니였습니다.

    용량을 줄여놓고보니 이번에는 가상화 VM 구조로 운영을 할 수 있게 되었습니다.

    그래서 200GB정도면 10년치를 확보 할 수 있겠다 싶어 잘 운영하고 있었죠.

    그런데 이미 7년이 넘어가는 시점에 도달하였고 역시 200GB 용량으로는 한계점이 오게되어 물리적인 용량을 늘려야 하는 시기가 또 다다르게 된것입니다.

    이번에는 조금 다른 생각을 하게되었습니다.

    기존에는 INDEX 컬럼을 삭제했다면 이번에는 물리적으로 ROW를 줄여보자는 마음이 생기더군요.

    처음부터 약속을 하는거죠.

    기준치에 미치지 못하는 경우에 대해서는 그냥 일괄 수집을 하지 않는 방법입니다.

    이 알고리즘은 아니 알고리즘이라고 말하기도 힘들죠. 그냥 방법론인거죠.

    처음에 몇가지 상태를 지정해놓고 그 상태를 바탕으로 기준에 미치지 못하면 ROW를 넣지 않고 기준에 부합할 경우에만 INSERT 시키는 방법입니다.

    이렇게 할 경우 제가 기준을 얼마나 높이냐에 따라 수집되는 데이터는 줄어들게되죠.

    대신 정확도는 점점 떨어지게됩니다.

    높은 수치를 지정해놓게되면 그 이하 수치는 모두 수집을 하지 않게 되니 정확도가 그만큼 떨어지게되죠.

    하지만 정확도와 무관하게 숫자가 0부터 1만까지가 있을 경우 0과 1은 큰차이가 생기지 않기에 0과 1을 제거 할 경우

    ROW갯수는 엄청나게 차이가 나게됩니다.

    크기 2.3GB 용량의 테이블 크기가 463.3MB 만큼 확보를 할 수 있게 되었습니다.

    바로 1에 대한 부분을 0과 퉁 쳐버린거죠.

    이제부터 0과 1은 같다 생각하고 1로 수집하는 모든 경우의 수를 배제해버리게 되죠.

    1개월에 0.5GB 정도의 용량을 확보 할 수 있다면 1년에 5기가를 확보하게 되는것입니다.

    10년이면 50기가가 되는거죠.

    MYSQL 테이블 데이터베이스 용량 줄이기

    1. 필요없는 INDEX를 삭제한다.

    인덱스 삭제는 신중해야합니다. DB속도를 좌지우지 하기 때문이죠.

    속도에 큰 문제가 없다 생각되면 삭제 하셔도 됩니다. 이때에는 ROW갯수가 100만개가 안 넘을 때 가능하죠.

    ROW갯수가 100만개가 넘어간다면 INDEX 설정은 어찌보면 필수일수 있습니다.

    테이블 갯수를 더 쪼개고 인덱스를 지우는 방법도 한번 생각해보세요.

    2. 필요없는 ROW를 삭제한다.

    저는 이미 인덱스는 삭제한 상태이며 이제는 ROW 갯수를 줄여가는 중입니다.

    지금은 1을 수집하지 않고 있지만 앞으로는 10이하를 수집 하지 않을 수도 있습니다.

    그렇게 되면 용량이 더 많이 확보되겠죠.

    10이하를 삭제할 경우 만약2GB용량이 200MB 정도의 용량이 된다면 과감하게 삭제 할 지도 모르겠습니다.

    한번 10이하를 몽땅 삭제 해보아야겠네요.

    Query OK, 22289399 rows affected (15 min 9.646 sec)

    1을 삭제 했더니 22,289,399개의 ROW가 삭제되었네요.

    총 갯수가 7천만개 정도 였으니… 대략 30%가 삭제된듯 합니다.

    1,2,3,4,5 총 5개의 항목이니 5이하를 삭제할 경우 대략 처음대비 70%정도의 용량이 늘어날 것으로 예상됨니다.

    명령어 입력을 잘 못하여 counter < 5 이렇게 넣었네요.

    이미 1항목이 삭제된 상태였고 5미만 처리 해서 5가 포함되지 않아 2,3,4 이렇게 3항목이 추가로 삭제 되었습니다.

    Query OK, 16883723 rows affected (10 min 33.614 sec)

    16,883,723건의 ROW가 삭제되었습니다.

    이번에는 아예 10 이하로 지정했습니다.

    1,2,3,4까지 삭제된 상태가 31,608,565개라면 10 이하를 삭제 할 경우 5,6,7,8,9,10 이렇게 총 6개 항목의 ROW가 삭제됩니다.

    Query OK, 9852316 rows affected (6 min 51.217 sec)

    생각한 수치만큼 많이 삭제되지는 않았네요.

    9,852,316건의 ROW가 삭제되었습니다.

    만약 ROW를 삭제 할 수 없는 상태라면 이렇게 고민을 해보시기 바랍니다.

    MAX 수치 또는 MIN 수치 값이 분명 존재할겁니다.

    혹은 가장 많은 수치를 반복적으로 수집되는 ROW가 많이 있다면 그 ROW만 제거하는 겁니다.

    그리고 제거된 날짜, INDEX 마다 체크하여 그 값이 존재한다고 가정하고 결과물을 만들어내는거죠.

    그 하나의 통일된 ROW만 제거 되더라도 용량 확보가 엄청 많이 됩니다.

  • AWS Route 53 도메인 이전 KSDOM(iTEASY) 가져오기

    AWS Route 53 도메인 이전 KSDOM(iTEASY) 가져오기

    AWS Route 53 쪽으로 도메인을 모으고 있습니다.

    이유는 간단합니다.

    관리가 편하거든요.

    사실 ITEASY (구. KSDOM) 업체를 이용했던 이유는 한가지였습니다.

    한국 도메인 (co.kr 과 kr)이 저렴하다는 정도였고 부가적인 요소를 굳이 찾으라 한다면 웹 DNS 를 도메인별로 50개 정도 제공한다는 점이 매력적이었죠. 사실 도메인마다 50개 다 채우려면 제 메인 tion.kr , tion.co.kr 이런 도메인들 아니고서는 힘들죠.

    관리 차원에서 tion.kr 도메인은 50개를 넘어서 tion.co.kr 도메인쪽에 DNS를 넘겨서 사용해야 했던 불편한 사항은 있긴했습니다.

    다른 업체 ( 후이즈, 가비아, 카페24, 닷네엠코리아, 도레지 등등 ) 왠만한 도메인 대행 업체를 사용해보았으며 가격면에서 KSDOM 만한 곳이 없었죠.

    하지만 최근에 와서 제가 위에 보여드린것처럼 AWS Route 53 쪽으로 도메인을 모으고 있습니다.

    특히 .com 도메인의 경우 13달러 (한화 대략 15000~16000원) 정도이며 여러가지 부가적인 세금이 붙으면 17000원 정도 하는데

    KSDOM과 가격차이가 거의 없더군요.

    게다가 제가 요즘 확보하는 도메인들은 글로벌화 하게 .com .net .link .click .es 등등 이러한 글로벌화에 맞춘 도메인들이라서 굳이 .co.kr 과 .kr 을 고집할 필요가 없더군요.

    그래서 만기 돌아오는 co.kr 도메인과 .kr 도메인은 필요하지 않다 싶으면 그냥 낙장으로 버리고 있고요.

    사용중인 도메인은 그냥 ksdom에 놔두고 사용중입니다.

    대신 .com 도메인과 .net 도메인들은 AWS Route 53 쪽으로 기관 이전을 신청하여 하나씩 옮기고 있습니다.

    옮기면서 더 좋아진 점이라면….음…. 자동결제? ㅎㅎ

    한국에도 자동결제 되는 업체가 있겠지만 그리고 10년 장기 결제 해놓으면 딱히 이런 부분들을 생각하지 않겠지만…

    1년단위로 결제를 해야하는 도메인도 사실 있습니다. 그리고 매해 결제를 늦지 않고 해야하죠.

    그런 도메인들이 자동으로 결제가 된다면 굿데디나 이런 서비스를 사용해도 괜찮죠.

    암튼… AWS Route 53 에 도메인을 올려놓으면 제가 편하고 좋습니다.

    DNS 서버도 아마존에서 EC2 인스턴스로 2개 운영하고 있으니 그냥 도메인관련해서는 아마존에게 다 맡긴 샘이죠.

    제 개인적으로 운영중이던 munhoyoung.com 도메인이 만료일이 다 되어서 낙장 대기 명단에 올라와있더군요.

    이를 KSDOM 업체에서 AWS Route 53 쪽으로 기관 이전을 진행합니다.

    위에 보시면 [ 기존 도메인을 이전 ] 합니다 라고 적혀있거든요. 이부분을 클릭하면 됩니다.

    확인 버튼을 클릭하면 이전이 가능한지 여부를 확인하고 바로 장바구니 넣어서 진행할 수 있습니다.

    이까지 딱히 어려운 부분은 없습니다.

    1. 권한 부여 코드 및 이름 서버

    이 부분은 영어가 아닌 한글로 번역되다보니 재미있는 단어가 나온거 같습니다.

    인증코드랑 네임서버 이렇게 두가지를 입력해야합니다.

    인증코드는 KSDOM 업체로 요청하면 도메인에 등록된 메일로 코드가 발급됩니다.

    이 코드를 아마존 Route 53 인증코드 항목에 입력하면 되고요.

    네임서버 항목에 뭘 넣으셔야 할지 모르는 분들이 상당히 많이 있습니다.

    일단은 이전하실때에는 이전전에 등록된 NameServer 리스트 그대로 유지하시는게 좋습니다.

    저처럼 네임서버를 따로 운영하고 관리를 해야한다면 새로 등록하면 되지만 ….

    저는 이전하기 이전에 KSDOM 업체에서 이미 네임서버를 변경한 상태입니다.

    개인정보관련해서 입력하시면 됩니다.

    저는 도메인을 이미 많이 등록한 상태라서 기존 등록된 기본 주소랑 정보가 입력되었네요.

    이 부분은 제가 중요하게 여기는 부분입니다. ㅎ

    도메인을 자동 갱신하시겠습니까? Yes!!

    이렇게 해서 신청했습니다.

    카드랑 세팅을 해야하지만 저는 이미 EC2 인스턴스랑 지불되는 항목들이 많다보니 도메인은 자동으로 결제되네요.

    6일 이내에 제 메일로 확인 메일이 한통 오게됩니다.

    KSDOM측에서 마지막 통보 확인 메일을 보내는거죠.

    여전히 이전 권한을 부여해야 합니다.
    이메일 주소를 변경했는지 여부에 따라 한 개 또는 세 개의 이메일을 보냅니다.
    
    중요
    6일 이내에 각 이메일의 링크를 클릭해야 합니다. 그렇지 않으면 이전이 취소됩니다.
    이전 권한 부여: AWS에서는 항상 현재 등록 연락처의 이메일 주소로 이메일을 보냅니다.
    이메일 주소에 대한 변경 권한 부여: 등록 연락처의 이메일 주소를 변경한 경우 일부 TLD 등록 레지스트리에는 사용자의 권한 부여가 필요합니다.
    이메일 한 통이 이전 이메일 주소로 전송됩니다.
    다른 이메일 한 통이 새 주소로 전송됩니다.
    변경 권한을 부여하려면 두 이메일에서 모두 링크를 클릭해야 합니다.
    다음 단계
    이전 권한 및 필요한 경우 이메일 주소 변경 권한을 부여한 후 도메인 이전이 시작됩니다. 이 작업에는 최대 11일이 소요될 수 있습니다. 이 기간 중 대부분은 현재 등록자가 이전을 승인하기를 기다리는 것입니다.
    
    다음은 귀하가 이전을 요청한 1개 도메인입니다.
    
    munhoyoung.com

    진짜로 이전하는게 맞냐? 라고 메일이 오게됩니다.

    각 업체에 맞게끔 맞다는 항목의 버튼을 클릭하면 이후 도메인은 AWS Route 53으로 이전이 완료되게됩니다.

    이전이 되면 실제 DNS A레코드와 CNAME 레코드가 정상적으로 동작하는지부터 확인해야합니다.

    끝! 쉽죠~?

    메일 도착했네요..

    한 10분 걸렸나? 그럴겁니다.

    이제 제가 할 부분은 다 했습니다.

    기다리면 도메인이 하나 늘어나있습니다.

    금방도착했네요.

    서버랑 프로그래밍 작업을 하고 있는데 확인해보니 이전되어져있네요.

    홈페이지도 잘 뜨고 있습니다.

    멋지네요.

    저 말고요 ㅎㅎ AWS Route 53 이요~

  • 워드프레스 젯팩 사이트가속기 사용하면 안되는 이유

    워드프레스 젯팩 사이트가속기 사용하면 안되는 이유

    왠만해선 젯팩을 유용하게 사용하고 있습니다.

    또 초보자 입장에서 젯팩 플러그인은 매우 유용하죠.

    하지만 오늘 다루는 내용은 젯팩에서 제공하는 사이트 가속기 플러그인입니다.

    간단하게 설명하면..

    젯팩에서 이미지를 자신의 서버로 들고 가서 더 가볍게 만들어서 자신의 서버로 보여주는 개념입니다.

    또 정적인 파일 (JS, STYLE) 파일을 압축하거나 가볍게 만들어서 CDN처럼 만들어주는 개념입니다.

    얼핏 들어보면 매우 좋아보이죠.

    내 사이트를 조금이라도 가볍게 만들어주고 더 빠르게 만들어주니깐요.

    하지만 매우 큰 단점이 한가지가 있습니다.

    바로 내 사이트에서 동작하지 않는다는 점입니다.

    시간이 흘러흘러 먼 미래에 젯팩은 엄청나게 규모가 커져 있을겁니다.

    제 워드프레가 젯팩 플러그인을 몽땅 활용하고 또 무거운 이미지를 젯팩 서버쪽에 맡기고 있을테니깐요.

    결국 내 자산이 늘어나고 브랜딩이 확장되는 개념이 아니라 젯팩의 브랜드를 나를 통해서 높여주고 있는것이죠.

    뭐 잘되는 업체 잘되게 하는것은 괜찮습니다.

    하지만 제가 우려하는것들은 젯팩의 오류라던지 서버와의 연동으로 인해서 워드프레스 이미지가 원할하게 나오지 않을때

    바로 끄때 뒤늦게 깨닫게되죠.

    그때 플러그인을 빼는 순간 여러분들의 HTML URL주소는 갑자기 바뀌게되므로 웹사이트 SEO에도 영향을 줄 수 있습니다.

    예전에 APM 달고 캐시 달면 사이트 빨라진다는 얄팍한 속임수에 속아서 캐시 플러그인과 APM 플러그인을 자주 활용했죠.

    애드센스 수익이 떨어지는것뿐만 아니라 제가 운영하는 워드프레스가 확장이되지 않는다는것을 깨닫고

    그날 이후로 모든 캐시관련 플러그인은 삭제했습니다.

    웹사이트 SEO 최적화를 위해서는 내가 만든 기능이 아니라면 가급적이면 피하는게 좋다는걸 알게되었죠.

    캐시 플러그인 남의 손에 맡기다간 어느순간 내수익이 상대방에게 가고 있다는 사실을 잊지마세요.

    지금 이 블로그랑 제가 운영하고 있는 모든 워드프레스 블로그에서는 캐시 플러그인과 AMP 플러그인을 사용하지 않고 있습니다. 덕분에 그 날 이후로 방문자가 무럭무럭 늘어나는 워드프레스도 생겨나고 있죠. 기대가 많이 되고 있습니다.

    오늘은 조금 중요한 내용인것같아서 메모해놓았습니다.

    보시는분들 캐시 플러그인 때문에 고민하고 있다면 잘 생각하고 돌리시기 바랍니다.

  • phpMyAdmin error deprecation notice in . vendor twig twig src loader filesystemloader.php#40

    phpMyAdmin error deprecation notice in . vendor twig twig src loader filesystemloader.php#40

    phpMyAdmin Errors

    phpMyAdmin Install

    phpMyAdmin install
    #Solution Script - linux
    
    rm -rf phpMyAdmin-5.2.1-all-languages.zip
    
    mkdir /var/www/backup
    
    cd /var/www/backup
    wget https://vlog.tion.co.kr/app/phpMyAdmin/phpMyAdmin-5.2.1-all-languages.zip
    unzip phpMyAdmin-5.2.1-all-languages.zip
    rm -rf phpMyAdmin-5.2.1-all-languages.zip
    
    rm -rf /var/www/phpMyAdmin
    mv phpMyAdmin-5.2.1-all-languages/ /var/www/phpMyAdmin
    
    
    cd /var/www/phpMyAdmin
    rm -rf config.inc.php
    rm -rf config.sample.inc.php
    wget -O config.inc.php https://vlog.tion.co.kr/html/phpmyadmin/config.inc.php?isDownload=1
    ll
    
    
    

    phpMyAdmin error

    phpMyAdmin deprecation notice in . vendor twig twig src loader filesystemloader.php#40

    The solution is to reinstall phpMyAdmin 5.2.x or later.

    DOWNLOAD

    Deprecation Notice in ./vendor/twig/twig/src/Loader/FilesystemLoader.php#40
     realpath(): Passing null to parameter #1 ($path) of type string is deprecated
    
    Backtrace
    
    ./vendor/twig/twig/src/Loader/FilesystemLoader.php#40: realpath(NULL)
    ./libraries/classes/Template.php#59: Twig\Loader\FilesystemLoader->__construct(string '/var/www/phpMyAdmin//templates/')
    ./libraries/classes/Theme.php#103: PhpMyAdmin\Template->__construct()
    ./libraries/classes/Theme.php#174: PhpMyAdmin\Theme->__construct()
    ./libraries/classes/ThemeManager.php#306: PhpMyAdmin\Theme::load(
    string './themes/metro',
    string '/var/www/phpMyAdmin/./themes/metro/',
    )
    ./libraries/classes/ThemeManager.php#89: PhpMyAdmin\ThemeManager->loadThemes()
    ./libraries/classes/ThemeManager.php#129: PhpMyAdmin\ThemeManager->__construct()
    ./libraries/classes/ThemeManager.php#397: PhpMyAdmin\ThemeManager::getInstance()
    ./libraries/common.inc.php#315: PhpMyAdmin\ThemeManager::initializeTheme()
    ./index.php#23: require_once(./libraries/common.inc.php)
    Deprecation Notice in ./vendor/twig/twig/src/Node/Node.php#161
     Return type of Twig\Node\Node::count() should either be compatible with Countable::count(): int, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice
    
    Backtrace
    
    ./vendor/composer/ClassLoader.php#444: include(./vendor/twig/twig/src/Node/Node.php)
    ./vendor/composer/ClassLoader.php#322: Composer\Autoload\includeFile(string '/var/www/phpMyAdmin/vendor/composer/../twig/twig/src/Node/Node.php')
    Composer\Autoload\ClassLoader->loadClass(string 'Twig\\Node\\Node')
    ./vendor/twig/twig/src/TwigFilter.php#150: class_exists(string 'Twig\\Node\\Node')
    ./vendor/composer/ClassLoader.php#444: include(./vendor/twig/twig/src/TwigFilter.php)
    ./vendor/composer/ClassLoader.php#322: Composer\Autoload\includeFile(string '/var/www/phpMyAdmin/vendor/composer/../twig/twig/src/TwigFilter.php')
    ./vendor/twig/twig/src/Extension/CoreExtension.php#214: Composer\Autoload\ClassLoader->loadClass(string 'Twig\\TwigFilter')
    ./vendor/twig/twig/src/ExtensionSet.php#433: Twig\Extension\CoreExtension->getFilters()
    ./vendor/twig/twig/src/ExtensionSet.php#423: Twig\ExtensionSet->initExtension()
    ./vendor/twig/twig/src/ExtensionSet.php#397: Twig\ExtensionSet->initExtensions()
    ./vendor/twig/twig/src/Environment.php#966: Twig\ExtensionSet->getUnaryOperators()
    ./vendor/twig/twig/src/Lexer.php#459: Twig\Environment->getUnaryOperators()
    ./vendor/twig/twig/src/Lexer.php#110: Twig\Lexer->getOperatorRegex()
    ./vendor/twig/twig/src/Environment.php#539: Twig\Lexer->__construct()
    ./vendor/twig/twig/src/Environment.php#595: Twig\Environment->tokenize()
    ./vendor/twig/twig/src/Environment.php#408: Twig\Environment->compileSource()
    ./vendor/twig/twig/src/Environment.php#381: Twig\Environment->loadClass(
    string '__TwigTemplate_5e4a7429ac6200a1f609bf802387b12eb0ea958b9f1bd4f816fec01d6b87b66a',
    string 'login/header.twig',
    NULL,
    )
    ./vendor/twig/twig/src/Environment.php#359: Twig\Environment->loadTemplate(string 'login/header.twig')
    ./libraries/classes/Template.php#100: Twig\Environment->load(string 'login/header.twig')
    ./libraries/classes/Template.php#134: PhpMyAdmin\Template->load(string 'login/header')
    ./libraries/classes/Plugins/Auth/AuthenticationCookie.php#144: PhpMyAdmin\Template->render(
    string 'login/header',
    array,
    )
    ./libraries/classes/Plugins/AuthenticationPlugin.php#268: PhpMyAdmin\Plugins\Auth\AuthenticationCookie->showLoginForm()
    ./libraries/common.inc.php#365: PhpMyAdmin\Plugins\AuthenticationPlugin->authenticate()
    ./index.php#23: require_once(./libraries/common.inc.php)
    Deprecation Notice in ./vendor/twig/twig/src/Node/Node.php#166
     Return type of Twig\Node\Node::getIterator() should either be compatible with IteratorAggregate::getIterator(): Traversable, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice
    
    Backtrace
    
    ./vendor/composer/ClassLoader.php#444: include(./vendor/twig/twig/src/Node/Node.php)
    ./vendor/composer/ClassLoader.php#322: Composer\Autoload\includeFile(string '/var/www/phpMyAdmin/vendor/composer/../twig/twig/src/Node/Node.php')
    Composer\Autoload\ClassLoader->loadClass(string 'Twig\\Node\\Node')
    ./vendor/twig/twig/src/TwigFilter.php#150: class_exists(string 'Twig\\Node\\Node')
    ./vendor/composer/ClassLoader.php#444: include(./vendor/twig/twig/src/TwigFilter.php)
    ./vendor/composer/ClassLoader.php#322: Composer\Autoload\includeFile(string '/var/www/phpMyAdmin/vendor/composer/../twig/twig/src/TwigFilter.php')
    ./vendor/twig/twig/src/Extension/CoreExtension.php#214: Composer\Autoload\ClassLoader->loadClass(string 'Twig\\TwigFilter')
    ./vendor/twig/twig/src/ExtensionSet.php#433: Twig\Extension\CoreExtension->getFilters()
    ./vendor/twig/twig/src/ExtensionSet.php#423: Twig\ExtensionSet->initExtension()
    ./vendor/twig/twig/src/ExtensionSet.php#397: Twig\ExtensionSet->initExtensions()
    ./vendor/twig/twig/src/Environment.php#966: Twig\ExtensionSet->getUnaryOperators()
    ./vendor/twig/twig/src/Lexer.php#459: Twig\Environment->getUnaryOperators()
    ./vendor/twig/twig/src/Lexer.php#110: Twig\Lexer->getOperatorRegex()
    ./vendor/twig/twig/src/Environment.php#539: Twig\Lexer->__construct()
    ./vendor/twig/twig/src/Environment.php#595: Twig\Environment->tokenize()
    ./vendor/twig/twig/src/Environment.php#408: Twig\Environment->compileSource()
    ./vendor/twig/twig/src/Environment.php#381: Twig\Environment->loadClass(
    string '__TwigTemplate_5e4a7429ac6200a1f609bf802387b12eb0ea958b9f1bd4f816fec01d6b87b66a',
    string 'login/header.twig',
    NULL,
    )
    ./vendor/twig/twig/src/Environment.php#359: Twig\Environment->loadTemplate(string 'login/header.twig')
    ./libraries/classes/Template.php#100: Twig\Environment->load(string 'login/header.twig')
    ./libraries/classes/Template.php#134: PhpMyAdmin\Template->load(string 'login/header')
    ./libraries/classes/Plugins/Auth/AuthenticationCookie.php#144: PhpMyAdmin\Template->render(
    string 'login/header',
    array,
    )
    ./libraries/classes/Plugins/AuthenticationPlugin.php#268: PhpMyAdmin\Plugins\Auth\AuthenticationCookie->showLoginForm()
    ./libraries/common.inc.php#365: PhpMyAdmin\Plugins\AuthenticationPlugin->authenticate()
    ./index.php#23: require_once(./libraries/common.inc.php)

  • phpmyadmin config.inc.php 설정 자동 다운로드 스크립트

    phpmyadmin config.inc.php 설정 자동 다운로드 스크립트

    phpmyadmin config.inc.php 설정

    phpMyAdmin 설정을 매번 서버 만들때마다 해야 합니다.

    그래서 이를 자동으로 서버 생성시 만들어지도록 하였습니다.

    #phpmyadmin 폴더에서 아래 명령어를 입력하세요
    #주의!! 새로 설치했을때만 적용하세요.
    
    cd /var/www/phpMyAdmin
    rm -rf config.inc.php
    rm -rf config.sample.inc.php
    wget -O config.inc.php https://vlog.tion.co.kr/html/phpmyadmin/config.inc.php?isDownload=1
    ll
    
    

    phpMyAdmin 5.x.x version config.inc.php file DOWNLOAD

    다로 파일 설정만 필요하면 아래 코드를 그대로 복사하여 사용하면 됩니다.

    <?php
    /* vim: set expandtab sw=4 ts=4 sts=4: */
    /**
    * phpMyAdmin sample configuration, you can use it as base for
    * manual configuration. For easier setup you can use setup/
    *
    * All directives are explained in documentation in the doc/ folder
    * or at <https://docs.phpmyadmin.net/>.
    *
    * @package PhpMyAdmin
    */
    declare(strict_types=1);

    /**
    * This is needed for cookie based authentication to encrypt password in
    * cookie. Needs to be 32 chars long.
    */
    $cfg[‘blowfish_secret’] = ‘DdryU(W(mnQcR8LB&dRJt_z(UBhYUrSf‘;

    /**
    * Servers configuration
    */
    $i = 0;

    /**
    * First server
    */
    $i++;
    /* Authentication type */
    $cfg[‘Servers’][$i][‘auth_type’] = ‘cookie’;
    /* Server parameters */
    $cfg[‘Servers’][$i][‘host’] = ‘localhost’;
    $cfg[‘Servers’][$i][‘compress’] = false;
    $cfg[‘Servers’][$i][‘AllowNoPassword’] = false;

    /**
    * phpMyAdmin configuration storage settings.
    */

    /* User used to manipulate with storage */
    // $cfg[‘Servers’][$i][‘controlhost’] = ”;
    // $cfg[‘Servers’][$i][‘controlport’] = ”;
    // $cfg[‘Servers’][$i][‘controluser’] = ‘pma’;
    // $cfg[‘Servers’][$i][‘controlpass’] = ‘pmapass’;

    /* Storage database and tables */
    // $cfg[‘Servers’][$i][‘pmadb’] = ‘phpmyadmin’;
    // $cfg[‘Servers’][$i][‘bookmarktable’] = ‘pma__bookmark’;
    // $cfg[‘Servers’][$i][‘relation’] = ‘pma__relation’;
    // $cfg[‘Servers’][$i][‘table_info’] = ‘pma__table_info’;
    // $cfg[‘Servers’][$i][‘table_coords’] = ‘pma__table_coords’;
    // $cfg[‘Servers’][$i][‘pdf_pages’] = ‘pma__pdf_pages’;
    // $cfg[‘Servers’][$i][‘column_info’] = ‘pma__column_info’;
    // $cfg[‘Servers’][$i][‘history’] = ‘pma__history’;
    // $cfg[‘Servers’][$i][‘table_uiprefs’] = ‘pma__table_uiprefs’;
    // $cfg[‘Servers’][$i][‘tracking’] = ‘pma__tracking’;
    // $cfg[‘Servers’][$i][‘userconfig’] = ‘pma__userconfig’;
    // $cfg[‘Servers’][$i][‘recent’] = ‘pma__recent’;
    // $cfg[‘Servers’][$i][‘favorite’] = ‘pma__favorite’;
    // $cfg[‘Servers’][$i][‘users’] = ‘pma__users’;
    // $cfg[‘Servers’][$i][‘usergroups’] = ‘pma__usergroups’;
    // $cfg[‘Servers’][$i][‘navigationhiding’] = ‘pma__navigationhiding’;
    // $cfg[‘Servers’][$i][‘savedsearches’] = ‘pma__savedsearches’;
    // $cfg[‘Servers’][$i][‘central_columns’] = ‘pma__central_columns’;
    // $cfg[‘Servers’][$i][‘designer_settings’] = ‘pma__designer_settings’;
    // $cfg[‘Servers’][$i][‘export_templates’] = ‘pma__export_templates’;

    /**
    * End of servers configuration
    */

    /**
    * Directories for saving/loading files from server
    */
    $cfg[‘UploadDir’] = ”;
    $cfg[‘SaveDir’] = ”;
    $cfg[‘TempDir’] = ‘/tmp’;
    /**
    * Whether to display icons or text or both icons and text in table row
    * action segment. Value can be either of ‘icons’, ‘text’ or ‘both’.
    * default = ‘both’
    */
    //$cfg[‘RowActionType’] = ‘icons’;

    /**
    * Defines whether a user should be displayed a “show all (records)”
    * button in browse mode or not.
    * default = false
    */
    //$cfg[‘ShowAll’] = true;

    /**
    * Number of rows displayed when browsing a result set. If the result
    * set contains more rows, “Previous” and “Next”.
    * Possible values: 25, 50, 100, 250, 500
    * default = 25
    */
    //$cfg[‘MaxRows’] = 50;

    /**
    * Disallow editing of binary fields
    * valid values are:
    * false allow editing
    * ‘blob’ allow editing except for BLOB fields
    * ‘noblob’ disallow editing except for BLOB fields
    * ‘all’ disallow editing
    * default = ‘blob’
    */
    //$cfg[‘ProtectBinary’] = false;

    /**
    * Default language to use, if not browser-defined or user-defined
    * (you find all languages in the locale folder)
    * uncomment the desired line:
    * default = ‘en’
    */
    //$cfg[‘DefaultLang’] = ‘en’;
    //$cfg[‘DefaultLang’] = ‘de’;

    /**
    * How many columns should be used for table display of a database?
    * (a value larger than 1 results in some information being hidden)
    * default = 1
    */
    //$cfg[‘PropertiesNumColumns’] = 2;

    /**
    * Set to true if you want DB-based query history.If false, this utilizes
    * JS-routines to display query history (lost by window close)
    *
    * This requires configuration storage enabled, see above.
    * default = false
    */
    //$cfg[‘QueryHistoryDB’] = true;

    /**
    * When using DB-based query history, how many entries should be kept?
    * default = 25
    */
    //$cfg[‘QueryHistoryMax’] = 100;

    /**
    * Whether or not to query the user before sending the error report to
    * the phpMyAdmin team when a JavaScript error occurs
    *
    * Available options
    * (‘ask’ | ‘always’ | ‘never’)
    * default = ‘ask’
    */
    //$cfg[‘SendErrorReports’] = ‘always’;

    /**
    * You can find more configuration options in the documentation
    * in the doc/ folder or at <https://docs.phpmyadmin.net/>.
    */

  • ESXi 7.0 자동 로그아웃 끄기

    ESXi 7.0 자동 로그아웃 끄기

    ESXi 7 사용중일때 자동으로 로그아웃 되버리면 VM 업로드 도중에 끊기거나 처음부터 다시 해야하는 경우가 생깁니다.

    이때 이 기능을 끌수 있는데 이부분에 대해서 정리합니다.

    매번 이렇게 종료되어 도메인 호스팅이 없을 시에는 아이디와 암호를 매번 입력해야합니다. 불편하죠

    ESXi 8, 7, 6 자동 로그아웃 해제

    관리 > 시스템 > 고급설정 > UserVars.HostClientSessionTimeout 값을 0 으로 변경

    UserVars.HostClientSessionTimeout = 0

    이제 로그아웃이 안됩니다.

  • nslookup 찾을 수 없습니다 ping 호스트에 연결할 수 없습니다

    nslookup 찾을 수 없습니다 ping 호스트에 연결할 수 없습니다

    윈도우 7 OS에서 인터넷 공유 방식으로 IP를 얻고 있습니다.

    메인 윈도우 PC에서 DNS 주소를 잡아주었음에도 불구하고 보조 PC 윈도우7에서는 DNS가 잡히지 않더군요.

    실제로 nslookup 명령어로 확인해보니 DNS서버 정보는 잘 나왔습니다.

    서버: UnKnown

    Address: 15.165.229.181

    그런데 호스트를 찾을 수 없다고 나오더군요.

    분명히 Internet Protocal Version 4 (TCP/IPv4) 속성에서 DNS 서버 주소까지 입력했는데도 안되더군요.

    이렇게 되어있어서 서버까지는 찾는거 같더군요.

    그런데 실제 동작을 하지 않아서 ing 호스트에 연결할 수 없습니다 멘트까지 보게되었습니다.

    이를 해결하고자 메인쪽 PC에서 인터넷 공유 하는 항목에도 TCP/IPv4 DNS 서버 주소를 입력했습니다.

    왼쪽 로컬 영역 연결에서만 속성을 변경했었는데… 이게 문제인듯 하여 공유 게이트웨이쪽도 해줬습니다.

    이렇게 하여 결국 nslookup 명령어랑 ping 명령어로 확인해보니 잘 연결되더군요.

    DNS 주소가 서버쪽에서는 이렇게 중요하단 사실을 오늘 또 실감합니다.

  • 도메인 컨설팅 (좋은 도메인 구입 등록 방법)

    도메인 컨설팅 (좋은 도메인 구입 등록 방법)

    브랜딩에서 중요한 역할을 하고 있는 도메인에 대해서 어떻게 생각하고 계신가요?

    혹시 아직 도메인을 구입하지 않으셨나요?

    그렇다면 지금 바로 도메인 컨설팅을 통하여 자신만의 브랜딩을 확보하시기 바랍니다.

    제가 운영하고 있는 회사이름은 [ 티온 ] 입니다.

    당연히 티온 도메인이 존재하겠죠?

    두개의 도메인에 대해서 확보하여 사용하고 있습니다.

    두개의 도메인을 이용하여 다양한 브랜드를 만들어서 활용하고 있습니다.

    블로그를 하는 분들에게 블로그지수 개념을 조금이라도 도와드리기 위한 [ 티온스테이션 ] sta.tion.co.kr 워드프레스 블로그와 개인 서버 구축에 관련된 정보를 일기처럼 기록하고 있는 지금 이 워드프레스 [ 리눅스맨 ] vlog.tion.co.kr 등 그 이외 몇개 더 만들어서 관리를 하고 있습니다.

    이렇게 도메인만 보더라도 [ 티온 ] 에서 운영하는 워드프레스 블로그라는 사실을 알 수 있습니다.

    그런데 이렇게 자신이 원하는 도메인을 쉽게 구입 할 수 없다는 것이 함정입니다.

    후이즈 도메인 대행 업체를 통하여 확인해보니 kr, co.kr, com, net, it, ai, io 등 인기있는 도메인은 모두 등록불가 상태입니다.

    그렇다고 포기하시지마세요. 도메인이 위에 보이는 전부가 아니기 때문입니다.

    더 많은 도메인을 검색해보면 등록 가능한 다양한 도메인을 찾을 수 있습니다.

    수 백개가 넘는 최상위 도메인 중에서 내가 활동하고 있는 영역과 잘 어울릴만한 도메인을 찾는것이죠.

    티온커뮤니티 사이트를 운영해보고 싶다면 tion.community 도메인을 확보하여 www.tion.community 이렇게 만들면됩니다.

    티온파트너스 사이트를 만들려면 tion.partners 도메인을 구입하여 그에 맞게 브랜딩을 할 수 있죠.

    제가 프로그래머이기도 하니 프로그램 툴을 제작해서 판매, 배포 하기 위해 티온 툴 사이트도 만들 수 있겠죠.

    www.tion.tools 이렇게 워드프레스 블로그를 이용하여 브랜딩을 한다면 또 새로운 브랜드가 만들어지는 것이죠.

    이렇게 인터넷에서 브랜딩은 정말 무궁무진하고 생각하면 할수록 너무 설레입니다.

    지금은 제가 [ 티온 ] 제 회사명을 바탕으로 이렇게 검색을 했잖아요.

    만약 내가 더 규모있게 전세계를 대상으로 도메인 대행 사업을 하고 싶다면? 어떤 도메인을 확보하면 될까요?

    domain 을 검색해보겠습니다.

    역시 제가 생각한것처럼 최상위 유명한 도메인은 누군가가 이미 확보하여 사용하고 있습니다.

    와우 이 분야는 정말 글로벌 스럽네요.

    정말 별로 안 유명한 최상위 도메인까지 전세계 사람들이 싹 쓸어갔네요.

    도메인 프로텍션? 도메인을 보호한다…

    조금 거리가 있기는 하지만 암튼 구입할 수 있는 도메인입니다.

    아래에 보니깐 테니스 관련 업종에 계신 대표님이라면 나름 괜찮은 도메인 같습니다.

    domain.tennis 이 테니스가 그 운동의 테니스 맞죠? ㅎㅎ

    이 도메인을 어떻게 활용할 수 있냐면요.

    my.domain.tennis [ 내 도메인 테니스 ] 이렇게 개인적으로 운영도 가능하지만 저는 글로벌하게 테니스 협회를 국제적으로 연결 하여 사용 한다면 나라별로 도메인을 만들어서 활용 할 수 있습니다.

    테니스 협회 국제 연맹

    보여지는 웹사이트로 운영하여도 되며 인트라넷 등 DNS 서버로 활용하기도 좋은 도메인 이름입니다.

    후이즈로 등록을 하게 된다면 1년에 8만8천원 비용으로 위 도메인을 사용 할 수 있습니다.

    만약 AWS ROUTE 53 서비스를 이용할 경우 $47에 1년 이용이 가능합니다.

    그렇게 큰 차이는 아니지만 환율 1500원으로 잡을 경우 대략 7만원정도이니 AWS ROUTE 53 서비스에서 구입할 경우 20%정도 더 저렴하게 구입을 할 수 있습니다.

    도메인 구매로 끝나는것이 아니라 워드프레스 홈페이지를 운영하기 위해서는 호스팅이 필요하며 호스팅과 함께 보안서버 인증서까지 확보하여야 합니다.

    대략적으로 기본 모델을 구입했다고 가정해보고 산출 해보도록 하겠습니다.

    보안서버 SSL 적용 할 경우 후이즈에서는 1년에 4만8천원이 추가 비용이 나오게됩니다.

    그리고 워드프레스 호스팅을 위한 스탠다드 ( 파일용량 3기가 ~ 5기가 ) 이용할 경우 한달에 2만원~3만원 정도 지출됩니다.

    제가 워드프레스 블로그를 다수 운영해봐서 잘 알고 있습니다.

    파일 용량 생각 하지 않고 그냥 막 사용하면 10G 생각보다 금방 사용됩니다.

    파일 크기를 줄이기 위해서 이미지(사진) 용량을 줄이는 프로그램을 사용해야지만 이러한 부분들로부터 해방되죠.

    아무튼 지금 보고 계신 이 워드프레스 블로그 [ 리눅스맨 ]의 용량은 대략 2G 정도 사용하고 있습니다.

    글 갯수는 300개 조금 넘는 수준이 2GB 라고 생각하면 됩니다.

    이렇게 따지면 2년 정도 지나서부터는 스탠다드 상품에서 한단계 위의 상품을 구입하여 사용해야 한다는 결론이 나오죠.

    만약에 클라우드 기반의 서버호스팅이라면 용량 늘리는 것은 문제가 전혀 안됩니다

    하지만 카페2*** 라던지 클라우드 기반이 아닌 업체를 이용할 경우 서버 이전을 해야하는 대형 이슈가 생겨버리죠.

    이전을 할 경우 또 30만원 ~ 100만원 이상의 서버 이전비용이 발생할 수 있습니다.

    이런거를 다 따지면 처음부터 프리미엄 월 7만원씩 지불하고 용량이 많은 서버를 호스팅하여 사용하기도 합니다.

    대략 10년을 운영한다고 가정하고 용량이 매해 1GB씩 늘어난다고 했을때 결국 파일용량은 10GB를 넘어가게 됩니다.

    10년치를 산출 하면 이렇습니다.

    호스팅비용: 5,856,000원

    보안서버 SSL 인증서 비용: 384,000원

    도메인비용: 704,000원

    합계: 6,944,000원 (10년 운영비용)

    대략 700만원 정도 비용이 지출됩니다.

    만약? 위의 금액에서 절반이상을 줄일 수 있다면? 330만원에 파일 용량도 10배 더 사용할 수 있고 더 좋은 사양으로 10년을 사용할 수 있다면 여러분들은 저에게 의뢰할 의향이 있으신가요? 게다가 매년마다 직접 도메인, 보안서버, 호스팅을 관리해드립니다.

    호스팅 서버의 파일용량 100GB 를 제공해드릴 수 있으며 같은 조건으로 AWS ROUTE 53 으로 domain.tennis 도메인을 10년 결제 해드리겠습니다. 이걸로 끝나는게 아니라 DNS 서버도 제가 직접 관리를 해드릴꺼며 만약 개별 DNS서버를 운영하고 싶으시다면 추가 금액 220만원으로 AWS EC2 DNS인스턴스 서버를 10년 이용 하실 수 있도록 세팅을 해드릴 수 있습니다.

    파일 용량 때문에 걱정하는 일은 없으실겁니다.

    더 많은 용량이 필요하여 1TB 이상의 개인 서버를 운영해야한다면 그 부분은 저와 따로 협의하여 서버를 운영 할 수 있습니다.

    브랜딩 도메인, 워드프레스 호스팅, 보안서버 신청은 스마트폰에서 아래 문자보내기를 클릭하여 신청할 수 있습니다.

    문자보내기

    감사합니다.

  • ESXi 7.0 Operation not permitted 원인 해결

    ESXi 7.0 Operation not permitted 원인 해결

    ESXi 7 서버를 운영하면서 Operation not permitted 문구를 너무 많이 봤습니다.

    처음에 서버를 설치할때에는 이러한 문제가 없었는데 ESXi 서버에서 ESXi 서버를 한번 더 설치 할 때 이 문구가 많이 보였고,

    또 최근에 ESXi 7.0 Update 3g 버전이상 설치하고 shell script 를 실행할때 위의 메시지가 나타났습니다.

    분명히 chmod 701 serverChecker.sh 이렇게 권한을 줬음에도 불구하고 permiited 즉 권한이 없다며 실행이 안되더군요.

    그 원인을 보안 부팅에서 찾았습니다.

    vi /etc/rc.local.d/local.sh

    유일하게 ESXi 부팅 시 내가 원하는 명령어를 입력할 수 있는 구간입니다.

    이 구간에 아래 노트를 잘 보면 UEFI 보안 부팅이 실행될 때 이 스크립트가 실행하지 않을꺼라고 적혀있습니다.

    Note: This script will not be run when UEFI secure boot is enabled.

    이 문장으로 인해서 [ Operation not permitted ] 권한 문제를 해결할 수 있었습니다.

    부팅 할 때 UEFI Secure boot 즉 보안부팅을 하지 않으면 됩니다.

    CMOS에 접속하여서 이부분을 변경하면되고요.

    만약 VM모드에서 동작하는거라면 아래 이미지처럼 VM 옵션을 변경하면 됩니다.

    이 부분을 체크박스 풀고 저장 눌러서 ESXi 서버를 실행하면 쉘스크립트가 권한 관련 메시지 나오지 않고 바로 실행됩니다.

    결국 이 모든것을 해결 해야 하는 근본적인 이유는 관리죠!!

    대량으로 관리를 하다보니 대량으로 서버가 잘 동작하고 있는지 매 분단위로 체크하고 확인해야합니다.

    그렇기 때문에 ESXi 서버가 처음에 켜질때 [ 나 켜졌습니다 ] [ 운전 중입니다 ] 라고 저에게 알려줘야합니다.

    처음에는 vCenter에 물려있다보니 vCenter 를 연결해제하고 정말 여러가지 시도를 많이 했습니다.

    정말 쉽게 해결될 문제임에도 불구하고 그 정확한 정보까지 접근전에는 답답함과 밤샘이 이어진다는 사실….

    당분간 ESXi 8 버전까지 가지고 놀 수 있을 듯 합니다.

    처음에는 ESXi 7.0 U3d 이상 버전에서 업데이트가 이루어진줄 알았는데… 저만의 착각이었네요.

    ESXi 8.0 버전까지 모두 동작합니다.