전 실습 때, AWS RDS 서비스를 통해 MySQL DB를 새로 만들었습니다.
이번 실습의 백엔드는 Node.js를 이용하기로 했으니,
Node.js와 DB를 연동한 후, Docker로 이미지를 만들어 베포해보겠습니다.
Node.js와 MySQL 연동은 시퀄라이즈(sequelize)를 이용하여 연동시켜보겠습니다.
(1)
npm i express sequelize sequelize-cli mysql2
npx sequelize init
먼저 mysql 패키지 설치 후 사진처럼 템플릿을 만들어 진행하겠습니다.
※ 본 실습은 Node.js 실습이 아닌 서버 구축 실습이기에, 설명없이 진행하며, 백엔드 코드는 더미코드로 간단하게만 이용할 수 있는 내용을 넣었습니다.
app.js
▼ 코드 복사 보기
const express = require("express");
const { sequelize } = require('./models');
const app = express();
app.set("port", process.env.PORT || 3000);
sequelize.sync({ force: false })
.then(() => {
console.log('데이터베이스 연결 성공');
})
.catch((err) => {
console.error(err);
});
app.use('/',(req,res,next) => {
res.send('hello express!!')
})
app.listen(app.get("port"), () => {
console.log(app.get("port"), "번 포트 연결완료");
});
/models/index.js
▼ 코드 복사 보기
const Sequelize = require('sequelize');
const User = require('./user');
const env = process.env.NODE_ENV || 'development';
const config = require('../config/config')[env];
const db = {};
const sequelize = new Sequelize(config.database, config.username, config.password, config);
db.sequelize = sequelize;
db.Sequelize = Sequelize;
db.User = User;
User.init(sequelize);
// User.associate(db);
module.exports = db;
/models/user.js
▼ 코드 복사 보기
const Sequelize = require('sequelize');
module.exports = class User extends Sequelize.Model {
static init(sequelize) {
return super.init({
name: {
type: Sequelize.STRING(20),
},
age: {
type: Sequelize.STRING(20),
}
}, {
sequelize,
timestamps: false,
underscored: false,
modelName: 'user',
tableName: 'users',
paranoid: false,
charset: 'utf8',
collate: 'utf8_general_ci',
});
}
// static associate(db) {
// db.User.hasMany(db.Comment, { foreignKey: 'commenter', sourceKey: 'id' });
// }
};
/config/config.json
▼ 코드 복사 보기
{
"development": {
"username": "user",
"password": "[ 본인이 설정한 비밀번호 ]",
"database": "user",
"host": "[ RDS 엔드포인트 ]",
"dialect": "mysql"
},
"test": {
"username": "root",
"password": null,
"database": "database_test",
"host": "127.0.0.1",
"dialect": "mysql"
},
"production": {
"username": "root",
"password": null,
"database": "database_production",
"host": "127.0.0.1",
"dialect": "mysql"
}
}
Dockerfile
▼ Node.js Dockerfile 코드 복사 보기
FROM ubuntu:20.04
RUN apt-get update
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y nodejs npm
# 2. 소스 복사
COPY . /usr/src/app
# 3. Nodejs 패키지 설치
WORKDIR /usr/src/app
RUN npm install
# 4. WEB 서버 실행 (Listen 포트 정의)
EXPOSE 3000
CMD node app.js
Mysql DB
현재 실습을 위한 DB에 user DB를 만들고,
users 테이블을 넣어놨습니다.
node.js 백엔드에서 user DB와 연동을 시켜놨습니다.
(2)
우분투의 서버에 코드를 전해주기위해, 쥬피터로 load 시켜도되지만, 폴더 자체를 옮기진 못하서, GitHub을 이용하여
서버로 Node.js를 옮기도록 하겠습니다.
git clone [ github repogitory 주소 ]
우분투 서버의 원하는 위치에 해당 주소를 clone해주세요.
- Username : [ github ID ]
- Password : [ Access Token ]
* GitHub Access Token 발급 방법
https://rfriend.tistory.com/685
clone가 완료된 폴더로 가보면, Github에 저장된 코드가 전부 복사된걸 확인 할 수 잇습니다.
(3)
docker build -t [컨테이너 명] .
docker run -p 3000:3000 web
Dockerfile이 있는 위치에서 build 후, run을 해주세요.
저는 3000번 포트를 사용했습니다.
*3000번 포트를 사용할 경우 AWS 인바운드 규칙에 3000을 열어주세요.
결과적으로 3000번 포트와 연결도 잘됬고,
DB 까지 연결 성공한 모습을 볼 수 있습니다.
Reference
GitHub Access Token 발급 방법 : https://rfriend.tistory.com/685
동빈나 유튜브 : https://www.youtube.com/watch?v=Z4x05HbN_T0&list=PLRx0vPvlEmdChjc6N3JnLaX-Gihh5pHcx&index=11
'DevOps > CI_CD' 카테고리의 다른 글
DevOps) CI/CD 구현하기 Jenkins(젠킨스) 자동 베포 구현하기 (10) (0) | 2022.04.18 |
---|---|
DevOps) CI/CD 구현하기 AWS RDS로 MYSQL 구축하기 (8) (0) | 2022.04.14 |
DevOps) CI/CD 구현하기 Docker에 MySQL 설치하기 (7) (0) | 2022.04.14 |
DevOps) CI/CD 구현하기 Docker에 Node 설치 (6) (0) | 2022.04.14 |
DevOps) CI/CD 구현하기 우분투에 Docker(도커) 설치 (5) (0) | 2022.04.14 |
댓글