옛날에 한 번 만들었다가 방치 끝에 삭제를 당해버린 서버의 부활 프로젝트 !!! ^^

 

"오라클 클라우드"를 처음 들어보신 분도 계실 수 있는데,

나름 어느 정도의 시장은 갖고 있는 ... 우리나라 리전도 갖고 있는 클라우드 플랫폼이다.

 

https://www.oracle.com/kr/cloud/

 

 

다른 클라우드들과 마찬가지로

계정 등록을 할 때 신용카드 정보가 필요하다. (1달라인가? 결제하고 곧바로 취소된다)

 

가입을 까막득한 옛날에 했다보니 기억이 가물거려서.... ^^

 

가입 후 화면을 보면 다음과 같다.

 

 

밑에 내려보면 "리소스 실행" 부분에 "VM 인스턴스 생성" 카드가 보인다.

이것을 선택하면 된다.

 

 

기본 이미지가 Orable Linux인데... 다른 배포판을 고를 수도 있다.

 

 

눈치빠른 분은 이미 파악하셨겠지만, 고를 수 있다고 해서 모두 무료가 아니다.

회색 뱃지가 붙어있는 것을 잘 확인해야 한다.

 

나는 익숙한 우분투로 골라봤다.

 

 

 SSH 키 생성해서 내려받는 방법도 있지만,

내가 사용하는 작업용 우분투에 이미 있는 Public-Key를 등록하는 방식으로 진행해봤다.

 

 

갖고 있는 Public-Key 복사해서 넣어줬다.

이렇게 하면 내 작업용 우분투에서 바로 오라클 서버로 접속할 수 있게 된다.

 

 

열심히 생성중이다.

확인해야 할 것은 "공용 IP 주소" 와 "사용자 이름"이다.

 

 

그냥 "ssh ubuntu@ip" 방식으로 접속하면 된다.

 

 

Disk 용량은 위에서 보듯이 50GB가 주어진 것을 알 수 있고,

메모리 용량은 다음과 같이 확인해볼 수 있다.

 

 

무료임에도 1GB를 주는 것은 대단한거다.

하지만, 뭣 좀 해보려면 좀 부족한 것도 사실이니.... swap을 잡아줘보자.

 

ubuntu@instance-20230626-2355:~$ free -h
                      total        used        free         shared    buff/cache   available
Mem:          964Mi       201Mi       168Mi       1.0Mi       594Mi       627Mi
Swap:            0B          0B             0B

ubuntu@instance-20230626-2355:~$ sudo fallocate -l 2G /swapfile

ubuntu@instance-20230626-2355:~$ sudo chmod 600 /swapfile

ubuntu@instance-20230626-2355:~$ sudo mkswap /swapfile
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=6be33865-5c3a-4cce-bca3-96b4e1880438

ubuntu@instance-20230626-2355:~$ sudo swapon /swapfile

ubuntu@instance-20230626-2355:~$ sudo swapon --show
NAME      TYPE SIZE USED PRIO
/swapfile file   2G   0B   -2

ubuntu@instance-20230626-2355:~$ free -h
                     total        used          free        shared   buff/cache   available
Mem:          964Mi       202Mi       165Mi       1.0Mi       596Mi       626Mi
Swap:         2.0Gi          0B            2.0Gi

 

위 명령어들을 따라해보면 2GB 사이즈의 swap 메모리를 만들어줄 수 있다.

하지만, 재부팅하게 되면 사라지니... 재부팅해도 유지될 수 있도록 추가 작업을 해주자.

 

ubuntu@instance-20230626-2355:~$ sudo nano /etc/fstab

 

아래 한 줄 추가해주면 된다. (탭으로 구분하는 것 잊지 말고!)

 

 

추가로... 우리는 대한민국 사람이니, 타임존을 맞춰주자.

 

ubuntu@instance-20230626-2355:~$ sudo timedatectl set-timezone Asia/Seoul

ubuntu@instance-20230626-2355:~$ timedatectl
                          Local time: Tue 2023-06-27 00:32:32 KST
                    Universal time: Mon 2023-06-26 15:32:32 UTC
                            RTC time: Mon 2023-06-26 15:32:32    
                           Time zone: Asia/Seoul (KST, +0900)    
System clock synchronized: yes                        
                        NTP service: active                     
                   RTC in local TZ: no

 

굳이 왜 이렇게까지 하냐면.... ^^

예전에 이렇게 만들어놓고 잊어먹어서.... 접속을 하지 않다가.... 결국은 삭제를 당했기에....

 

 

파이썬 환경을 만들어보자.

 

ubuntu@instance-20230626-2355:/srv/workspace/python-gmail$ sudo apt install python3

ubuntu@instance-20230626-2355:/srv/workspace/python-gmail$ sudo apt install python-is-python3

ubuntu@instance-20230626-2355:/srv/workspace/python-gmail$ sudo apt install python3-pip

ubuntu@instance-20230626-2355:/srv/workspace/python-gmail$ pip install requests

 

아래 소스코드를 저장해놓자.

 

#!/usr/bin/env python3
"""
Send email via Gmail SMTP
"""

__author__ = "whatwant"
__version__ = "0.1.0"
__license__ = "BEER-WARE"

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from requests import get


def send_email(sender_email, receiver_email, app_password, subject, text, html):
    message = MIMEMultipart("alternative")
    message["Subject"] = subject
    message["From"] = sender_email
    message["To"] = receiver_email

    part1 = MIMEText(text, "plain")
    part2 = MIMEText(html, "html")

    message.attach(part1)
    message.attach(part2)

    with smtplib.SMTP_SSL("smtp.gmail.com", 465) as server:
        server.login(sender_email, app_password)
        server.sendmail(sender_email, receiver_email, message.as_string())


def get_ip():
    ip = get("https://api.ipify.org").text
    return ip


if __name__ == "__main__":
    sender_email = "whatwant@whatwant.com"
    receiver_email = "whatwant@gmail.com"
    app_password = "xxxxxx"

    subject = "This is a lucky email from Python"
    text = f"My public IP address : {get_ip()}"
    html = f"<html><body><p>{text}</p></body></html>"

    send_email(sender_email, receiver_email, app_password, subject, text, html)

 

위 코드를 실행하면 다음과 같이 메일이 온다.

 

 

하루에 한 번씩 보내도록 하자 ^^

 

만날 헷갈리는 crontab ... 예쁜 사이트의 도움을 받자.

 

https://crontab.guru/

 

crontab 등록을 해보자.

 

ubuntu@instance-20230626-2355:/srv/workspace/python-gmail$ crontab -e

 

 

이제, 매일 새벽 4시에 메일을 보내준다 ^^

반응형

 

1대의 개발PC에서

여러 대의 Server 환경을 구축하고자 할 때 VirtualBox를 이용하곤 한다.

 

VirtualBox

 

Kubernetes 실습 환경을 구축하기 위해서

master 1대 + worker 2대 = 총 3대의 Ubuntu Server 머신이 필요한 경우를 생각해보자.

 

개인적인 취향으로 Ubuntu를 애용하는데,

Ubuntu를 설치하고 나면 locale 설정, timezone 설정 等 나름 여러가지로 셋팅을 할 것들이 많다.

 

그렇게 우선 master 역할을 할 1대의 Ubuntu Server를 셋팅을 했다고 해보자.

- https://www.whatwant.com/entry/Ubuntu-Server-2204-LTS

 

이제 worker 역할을 할 2대의 Ubuntu Server를 만들어야 하는데,

다시 또 OS 설치하고 셋팅하는 과정을 반복해야하는 것은 너무나 비효율적인 것 같다.

 

그래서 VirtualBox의 머신 복제 기능을 이용해보고자 한다.

 

복제

 

좀 더 많은 정보를 보려면 "전문가 모드"를 선택하면 된다.

원하는 머신 이름과 경로(Path)를 입력하고, MAC 정책은 새로운 MAC 주소 설정을 하도록 하자.

 

설정

 

이걸로 준비는 끝났다.

"Finish"를 눌러주면 복사가 이뤄진다. 생각보다 오래걸린다(개인적인 PC 환경 차이일 수도 있다^^).

 

Finish

 

이것으로 끝났을까!? 아니다!!!

일단 시작해서 부팅해보자.

 

부팅

 

여기에서 어떤 것이 문제가 될 수 있는지 찾아보기 바란다! ^^

 

$ hostname

master

 

그렇다! 원본과 같은 hostname을 쓰고 있다.

그러면 바꿔주면 된다 ^^

 

$ sudo hostnamectl set-hostname worker01

$ hostname

worker01

 

여기까지~

 

반응형


예전에 타이젠(Tizen)의 빌드 환경을 통해 어설프게 접하게 된 컨테이너 기반의 가상환경.
최근에 IT 관련 뉴스를 통해서 docker라는 오픈소스 소프트웨어를 알게 되었고 관심을 갖게 되었다.

VMWare, VirtualBox와 같은 Host OS와 분리되어 거의 완벽히 가상의 Destop을 활용하는 것이 장점이 많기는 하지만,
치명적인 약점이 하나 있는데, Host OS에서 프로세스를 실행하는 것과 비교하여 현저히 떨어지는 성능이 이슈이다.

그런데, 이러한 성능 문제를 해결하면서 독립적인 환경을 구축할 수 있도록 도와주는 기술이 있으니,
Linux Container에 기반한 컴패니언(companion) 소프트웨어인 "docker"가 바로 그러한 기술이다!
 

docker 설치 방법은 다음 경로를 통해서 확인할 수 있다.
   - http://docs.docker.com/installation/ubuntulinux



1. 현재 서버 상태 확인
    - docker를 설치하고자 하는 서버의 상태를 먼저 확인하자.

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.1 LTS
Release: 14.04
Codename: trusty

$ uname -a
Linux chani-VBox 3.13.0-39-generic #66-Ubuntu SMP Tue Oct 28 13:30:27 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux



2. docker 설치
   - 패키지로 설치하면 된다.

$ sudo apt-get install docker.io

$ docker -v
Docker version 1.0.1, build 990021a


   - 이걸로 설치는 끝이다.



3. 사용자 설정
   - 별도의 root 권한 (sudo) 없이 그냥 사용하기 위해서 docker 그룹에 포함이 되자.

$ sudo gpasswd -a [현재사용자] docker
사용자 [현재사용자]을(를) docker 그룹에 등록 중

$ sudo service docker.io restart


   - docker 그룹에 포함된 것이 적용되기 위해서는 다시 로그인을 하면 된다.



4. 현재 Image 확인
   - 명령어들을 하나씩 확인해보자.

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE


   - 3번의 설정을 하지 않았으면 위와 같이 명령어를 했을 때, 권한 에러가 난다.
   - 아직은 아무런 이미지가 없는 상태다.



5. 이미지 다운로드 받기
   - docker에서는 미리 이미지를 만들어놓은 것을 제공해준다.
   - 제공해주는 image를 다운로드 받자.

$ docker pull ubuntu
Pulling repository ubuntu
195eb90b5349: Download complete
277eb4304907: Download complete
463ff6be4238: Download complete
c5881f11ded9: Download complete
3db9c44f4520: Download complete
0b310e6bf058: Download complete
5506de2b643b: Download complete
511136ea3c5a: Download complete
6cfa4d1f33fb: Download complete
3af9d794ad07: Download complete
bac448df371d: Download complete
5f18d94c3eca: Download complete
e12c576ad8a1: Download complete
f127542f0b61: Download complete
d497ad3926c8: Download complete
53db23c604fd: Download complete
b7c6da90134e: Download complete
fae16849ebe2: Download complete
dfaad36d8984: Download complete
9f045ea36057: Download complete
47dd6d11a49f: Download complete
0f4aac48388f: Download complete
5796a7edb16b: Download complete
d03a1a9d7555: Download complete
209ea56fda6d: Download complete
30868777f275: Download complete
102eb2a101b8: Download complete
ccb62158e970: Download complete
530dbbae98a0: Download complete
e791be0477f2: Download complete
37dde56c3a42: Download complete
3680052c0f5c: Download complete
8f118367086c: Download complete
22093c35d77b: Download complete


   - 다운로드 받은 것을 확인해 보자.

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu              14.10               277eb4304907        3 weeks ago         228.5 MB
ubuntu              utopic              277eb4304907        3 weeks ago         228.5 MB
ubuntu              trusty              5506de2b643b        3 weeks ago         199.3 MB
ubuntu              14.04               5506de2b643b        3 weeks ago         199.3 MB
ubuntu              latest              5506de2b643b        3 weeks ago         199.3 MB
ubuntu              14.04.1             5506de2b643b        3 weeks ago         199.3 MB
ubuntu              12.04               0b310e6bf058        3 weeks ago         126.7 MB
ubuntu              12.04.5             0b310e6bf058        3 weeks ago         126.7 MB
ubuntu              precise             0b310e6bf058        3 weeks ago         126.7 MB
ubuntu              12.10               c5881f11ded9        5 months ago        172.2 MB
ubuntu              quantal             c5881f11ded9        5 months ago        172.2 MB
ubuntu              13.04               463ff6be4238        5 months ago        169.4 MB
ubuntu              raring              463ff6be4238        5 months ago        169.4 MB
ubuntu              13.10               195eb90b5349        5 months ago        184.7 MB
ubuntu              saucy               195eb90b5349        5 months ago        184.7 MB
ubuntu              10.04               3db9c44f4520        6 months ago        183 MB
ubuntu              lucid               3db9c44f4520        6 months ago        183 MB



6. 실행해 보기
   - 다운로드 받은 이미지 중 하나를 실행해보자.

$ cat /etc/issue
Ubuntu 14.04.1 LTS \n \l

$ docker run -i -t ubuntu:12.04 /bin/bash

root@9463f87188ac:/# cat /etc/issue
Ubuntu 12.04.5 LTS \n \l


   - 14.04 버전의 Ubuntu에 docker를 설치하고, 이미지를 다운로드 받은 후
   - 12.04 버전의 Ubuntu를 docker를 통해서 실행을 한 것이다.

   - 마치 telnet이나 ssh를 통해서 접속한 것과 같은 모습이다.


일단 여기에서 한 꼭지 마무리하겠다.

반응형

+ Recent posts