시작 부터 에러가
kimdaejeong@base-backend-1:~$ sudo apt-get install nginx
E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?
구글링해서
E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?
위 에러를 아래와 같이 해결했습니다.
우선 터미널 여시고 모든 프로세스를 죽여줍니다~!
1) sudo killall apt apt-get
만일 진행중인 프로세스가 없다라고 뜨면, 아래와 같이 하나하나씩 디렉토리를 삭제해주세요.
- sudo rm /var/lib/apt/lists/lock
- sudo rm /var/cache/apt/archives/lock
- sudo rm /var/lib/dpkg/lock*
sudo dpkg --configure -a 를 하시고 sudo apt update
sudo dpkg --configure -a 에서 다시 에러
kimdaejeong@base-backend-1:~$ sudo dpkg --configure -a
dpkg: error: dpkg status database is locked by another process
kimdaejeong@base-backend-1:~$ sudo rm /var/lib/dpkg/lock
kimdaejeong@base-backend-1:~$ sudo dpkg --configure -a
dpkg: error: dpkg status database is locked by another process
lsof /var/lib/dpkg/lock 으로 해결된 듯.. 왜 때문에?
dpkg: error: dpkg status database is locked by another process - Ask Ubuntu
설치 성공
kimdaejeong@base-backend-1:~$ nginx -V
nginx version: nginx/1.10.3 (Ubuntu)
built with OpenSSL 1.0.2g 1 Mar 2016
TLS SNI support enabled
configure arguments: --with-cc-opt='-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_v2_module --with-http_sub_module --with-http_xslt_module --with-stream --with-stream_ssl_module --with-mail --with-mail_ssl_module --with-threads
80 포트로 변경하고 서버 시작
$ vi /etc/nginx/sites-enabled/default
$ sudo service nginx start
Certbot을 이용하여 Ngix에 SSL 인증서 적용하기
인증서 만들기
Certbot으로 무료 인증서 발급 받기 | MHLab Blog (elfinlas.github.io)
Ubuntu Nginx 환경에서 CertBot을 사용하여 https 사용하기 (velog.io)
[Nginx] Nginx HTTPS 및 Let's Encryt SSL 인증서 적용⋆ JackerLab
여기를 참고..
kimdaejeong@base-backend-1:/var/www/html/.well-known/acme-challenge$ sudo certbot certonly --webroot -w /var/www/html -d app.mdiwebma.com
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for app.mdiwebma.com
Using the webroot path /var/www/html for all unmatched domains.
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/app.mdiwebma.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/app.mdiwebma.com/privkey.pem
Your cert will expire on 2021-11-01. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF:
설치 과정중에 http 서버가 실행중이어야한다.
/var/www/html 이 현재 http를 서비스하고 있는 nginx의 root 디렉토리이다.
인증서는 /etc/letsencrypt에 있다.
kimdaejeong@base-backend-1:/etc/letsencrypt$ sudo ls -al /etc/letsencrypt/live/app.mdiwebma.com
total 12
drwxr-xr-x 2 root root 4096 Aug 3 11:34 .
drwx------ 3 root root 4096 Aug 3 11:34 ..
lrwxrwxrwx 1 root root 40 Aug 3 11:34 cert.pem -> ../../archive/app.mdiwebma.com/cert1.pem
lrwxrwxrwx 1 root root 41 Aug 3 11:34 chain.pem -> ../../archive/app.mdiwebma.com/chain1.pem
lrwxrwxrwx 1 root root 45 Aug 3 11:34 fullchain.pem -> ../../archive/app.mdiwebma.com/fullchain1.pem
lrwxrwxrwx 1 root root 43 Aug 3 11:34 privkey.pem -> ../../archive/app.mdiwebma.com/privkey1.pem
-rw-r--r-- 1 root root 692 Aug 3 11:34 README
nginx 설정파일 변경
server {
# listen 80 default_server;
# listen [::]:80 default_server;
# SSL configuration
#
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl_certificate /etc/letsencrypt/live/app.mdiwebma.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/app.mdiwebma.com/privkey.pem;
nginx restart로 동작확인
sudo service nginx restart
자동 갱신
/etc/cron.d/certbot 이 추가되었음 확인가능
인증서 갱신:
# 인증성 갱신없이 갱신이 가능한지 체크만 한다.
sudo certbot renew --dry-run
# 실제 인증서를 갱신한다. 80포트가 살아있어야 한다.
sudo certbot renew
# nginx 재시작해야 적용이 되더라.
sudo service nginx restart
자동 갱신하기
HotHandCoding :: certbot를 활용한 https 인증서 발급 및 cron 설정 (tistory.com) 여기를 참고
# 이미 등록되어 있는지 확인
crontab -l
# 없으면 추가
crontab -e
# 2월 28일 마다 (https://crontab.guru/ 참고)
0 0 28 1 * certbot renew --renew-hook "sudo service nginx restart"
GCP 우분투에 Mongodb 설치하기
Install MongoDB Community Edition on Ubuntu — MongoDB Manual
여기를 거의 참고했고, 지시에 따라서 하면 거의 되는데 뭔가 잘 안된 부분만 수정한다.
5.0 버전은 설치가 안 된다. 설치는 -y mongodb-org 로 문서에 되어 있는데 실제로는 에러를 내고 -org 를 지우고 하니 제대로 설치가 되었다.
sudo apt-get install -y mongodb
서버 실행도 mongod로 실행하니 에러를 내고, mongodb로 하니 제대로 실행되고 mongo를 실행해서 접속도 되었다.
sudo service mongodb start
이 방법은 너무 낮은 버전의 mongodb(2.x)를 설치한다. 삭제하고 다시 시도. (삭제는 메뉴얼대로 하니 문제없이 됨)
5.0은 아무리해도 설치가 안 되서, 4.4 버전의 Mongodb를 설치를 다시 시도하기 (메뉴얼에서 해당 OS에 맞는 명령줄을 복사해서 5.0을 4.4로 변경)
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list
OS 확인
kimdaejeong@base-backend-1:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.7 LTS
Release: 16.04
Codename: xenial
64bit인지 확인
kimdaejeong@base-backend-1:~$ uname -m
x86_64
init system 확이
kimdaejeong@base-backend-1:~$ ps --no-headers -o comm 1
systemd
4.4버전의 Mongodb는 설치 성공했음.. 서버 실행
$ sudo systemctl start mongod
Mongo db 5.x의 설치는 상위 버전의 우분투 이미지를 이용해서 설치 시도하여 성공했음 : https://dajkim76.tistory.com/535
GCP에 deno 설치
Deno - A secure runtime for JavaScript and TypeScript
curl -fsSL https://deno.land/x/install/install.sh | sh
kimdaejeong@base-backend-1:/etc/cron.d$ curl -fsSL https://deno.land/x/install/install.sh | sh
######################################################################## 100.0%
Archive: /home/kimdaejeong/.deno/bin/deno.zip
inflating: /home/kimdaejeong/.deno/bin/deno
Deno was installed successfully to /home/kimdaejeong/.deno/bin/deno
Manually add the directory to your $HOME/.bash_profile (or similar)
export DENO_INSTALL="/home/kimdaejeong/.deno"
export PATH="$DENO_INSTALL/bin:$PATH"
Run '/home/kimdaejeong/.deno/bin/deno --help' to get started
위에 표시된 환경변수 두 줄을 .bashrc 맨 아래를 추가해 둔다.
kimdaejeong@base-backend-1:~$ vi .bashrc
kimdaejeong@base-backend-1:~$ . .bashrc
kimdaejeong@base-backend-1:~$ deno
Deno 1.12.2
exit using ctrl+d or close()
설치단계에서 unzip 에러가 나면 : GitHub - denoland/deno_install: Deno Binary Installer
sudo apt-get install unzip -y
Deno Server test
server.ts
import { Application, Router, Context } from "https://deno.land/x/oak/mod.ts"
import { Bson, MongoClient } from "https://deno.land/x/mongo/mod.ts";
// Init mongo db
const client = new MongoClient();
//Connecting to a Local Database
await client.connect("mongodb://localhost:27017");
// Define collection
interface TSList {
_id: { $oid: string };
moneyBookId: Bson.ObjectId
collectionName: string;
ts: number
}
const db = client.database("testdb");
const tslist = db.collection<TSList>("TSList");
// Http Handler
const getTSList = async ({ response }: { response: any }) => {
const result = await tslist.find().toArray()
response.body = {
code: 0,
result: result
}
}
const errorHandler = async (ctx: Context, next: any) => {
try {
await next();
} catch (err) {
ctx.response.status = 500;
ctx.response.body = { code: 500, message: err.message }
}
}
const _404 = async (ctx: Context) => {
ctx.response.status = 404;
ctx.response.body = { code: 404, message: "404 Not Found!" }
}
// Init router
const router = new Router()
router.get("/lt/v1/tslist", getTSList)
// Init server
const app = new Application()
const port = 8000
app.use(errorHandler);
app.use(router.routes())
app.use(router.allowedMethods())
app.use(_404)
console.log("start server port=" + port);
await app.listen({ port: port });
서버 실행까지는 성공함
$ deno run --inspect --allow-net --unstable server.ts
Debugger listening on ws://127.0.0.1:9229/ws/e35c1134-9494-4ee6-b0e5-f2623cbb3e83
start server port=8000
Nginx에 프락시 설정하기
sudo vi /etc/nginx/sites-enabled/default
location /lt {
proxy_pass http://localhost:8000;
}
연결 확인 https://app.mdiwebma.com/lt/v1/tslist
GCP에 ssh로 접속하기
메타데이터에서 SSH 키 관리 | Compute Engine 문서 | Google Cloud 참고..
Mac에 키 생성
ssh-keygen -t rsa -f ~/.ssh/gcp.key -C kimdaejeong
GCP 메타 데이타에 public 키 등록
$ cat gcp.key.pub
https://console.cloud.google.com/compute/metadata/sshKeys 에 키 등록
Mac 에서 접속
$ ssh -i ~/.ssh/gcp.key kimdaejeong@<GCP IP>
Enter passphrase for key '/Users/user/.ssh/gcp.key':
OS를 여러개 사용되었을때, 이전 OS에 사용된 IP가 새로 실행한 VM에 다시 할당된 경우는
~/.ssh/known_hosts 에서 해당 IP를 지우고 다시 시도한다.