시놀로지, SSH로, 도커 이용 방법
login as: creban
creban@tcle.co.kr's password:
Using terminal commands to modify system configs, execute external binary
files, add files, or install unauthorized third-party apps may lead to system
damages or unexpected behavior, or cause data loss. Make sure you are aware of
the consequences of each command and proceed at your own risk.
Warning: Data should only be stored in shared folders. Data stored elsewhere
may be deleted when the system is updated/restarted.
creban@TCLE:~$ sudo su
Password:
ash-4.4# bash
bash-4.4# docker search tomcat
bash-4.4# docker pull tomcat:9-jdk8
bash-4.4# docker pull mysql:5.7.44
bash-4.4# docker inspect tomcat
bash-4.4# docker inspect mysql
bash-4.4# docker ps
bash-4.4# docker port mysql-1
bash-4.4# docker list
bash-4.4# docker stop mysql-1
bash-4.4# docker rm mysql-1
bash-4.4# docker run -d -p 3306:3306 --name mysql-1 -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql:5.7.44
톰캣을 사용하기 전, webstation에 tomcat에 사용할 도메인을 미리 만들어둬야 합니다.
예) tomy.mydomain.com
dns server 사용중이라면, dns server에서 도메인 네임을 미리 만들어두세요.
참고로 mssql은 다음과 같이 pull 하면 된다.
bash-4.4# docker pull mcr.microsoft.com/mssql/server:2019-latest
이미지 버전 (mysql 5.7.44, tomcat9-jdk8)
mysql 변수 설정
- MYSQL_ROOT_PASSWORD
- MYSQL_USER
- MYSQL_PASSWORD
- MYSQL_DATABASE
- TZ Asia/Seoul
tomcat 볼륨 설정
- tomcat은 webstation 에서 관리
- /내폴더
/usr/local/tomcat/webapps
jdbc 버전 https://dev.mysql.com/downloads/connector/j/
- jdbc jar 파일은 /usr/local/tomcat/lib 에 넣어주시거나,
- /webapps/ROOT/WEB-INF/lib 에 넣어주면 되며,
- 두곳에 모두 있다면 /webapps/ROOT/WEB-INF/lib 안에 있는 라이브러리가 적용됩니다.
샘플 DB
CREATE DATABASE bentdb CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE bentdb;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password VARCHAR(255) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
is_verified BOOLEAN DEFAULT FALSE,
registration_code VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO users (username,PASSWORD,email) VALUES ('1a','2a','3a');
INSERT INTO users (username,PASSWORD,email) VALUES ('2a','3a','4a');
INSERT INTO users (username,PASSWORD,email) VALUES ('3a','4a','5a');
INSERT INTO users (username,PASSWORD,email) VALUES ('4a','5a','6a');
INSERT INTO users (username,PASSWORD,email) VALUES ('5a','6a','7a');
INSERT INTO users (username,PASSWORD,email) VALUES ('6a','7a','8a');
INSERT INTO users (username,PASSWORD,email) VALUES ('7a','8a','9a');
INSERT INTO users (username,PASSWORD,email) VALUES ('8a','9a','0a');
INSERT INTO users (username,PASSWORD,email) VALUES ('9a','0a','1a');
INSERT INTO users (username,PASSWORD,email) VALUES ('한글','0a','1a');
SELECT * FROM users;
혹시 사용자 관련 변경이 필요하다면
ALTER USER 'root'@'localhost' IDENTIFIED BY 'test999'; //mysql 8.0 이상
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test999';
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'test999';
GRANT ALL PRIVILEGES ON bentdb.* TO 'creban'@'%' IDENTIFIED BY 'test999';
FLUSH PRIVILEGES;
샘플 jsp
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page import="java.sql.*" %>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>MySQL Connection Test</title>
<style>
*{margin:0;padding:0;box-sizing: border-box;}
main {
margin: 0 auto;
max-width: 1000px;
padding:1em;
}
table {
width: 100%;
margin: 0.6em 0;
border-spacing: 0;
border-collapse: collapse;
}
th,
td {
border:1px solid black;
padding: 3px;
}
</style>
</head>
<body>
<main>
<h1>MySQL Connection Test</h1>
<%
String DB_URL = "jdbc:mysql://172.10.0.2:3306/bentdb"; // 데이터베이스 주소
String DB_USER = "cocatv"; // MySQL 사용자명
String DB_PASS = "test999"; // MySQL 비밀번호
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver"); // JDBC 드라이버 로드
conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASS);
stmt = conn.createStatement();
String sql = "SELECT * FROM users"; // users 테이블에서 데이터 조회
rs = stmt.executeQuery(sql);
out.println("<table>");
out.println("<tr>");
out.println("<th>ID</th>");
out.println("<th>Username</th>");
out.println("<th>Email</th>");
out.println("<th>Is Verified</th>");
out.println("<th>Registration Code</th>");
out.println("<th>Created At</th>");
out.println("</tr>");
while(rs.next()) {
// 레코드에서 값을 읽어와서 출력
out.println("<tr>");
out.println("<td>" + rs.getInt("id") + "</td>");
out.println("<td>" + rs.getString("username") + "</td>");
out.println("<td>" + rs.getString("email") + "</td>");
out.println("<td>" + rs.getBoolean("is_verified") + "</td>");
out.println("<td>" + rs.getString("registration_code") + "</td>");
out.println("<td>" + rs.getTimestamp("created_at") + "</td>");
out.println("</tr>");
}
out.println("</table>");
} catch (Exception e) {
out.println("Error: " + e.getMessage());
e.printStackTrace();
} finally {
// 자원 정리
if(rs != null) try { rs.close(); } catch (SQLException e) { e.printStackTrace(); }
if(stmt != null) try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); }
if(conn != null) try { conn.close(); } catch (SQLException e) { e.printStackTrace(); }
}
%>
<dl>
<dt>[JDBC Driver]</dt>
<dd>
<%
out.println("JDBC Driver Version: " + com.mysql.cj.jdbc.Driver.class.getPackage().getImplementationVersion());
%>
</dd>
</dl>
</main>
</body>
</html>
아래 화면 안나오고 에러가 난다면!!! 방화벽 설정이 안된거에요. 아래 방화벽 설정 확인
그리고 제일 중요한 것!
시놀로지의 방화벽 설정
- 이부분이 되어있지 않으면, MYSQL 접속이 안되며, 502 에러 또는 504 에러가 발생합니다.
- 제어판 > 보안 > 방화벽 > 생성 > 포트 (사용자지정, 대상포트, TCP, 3306 자신꺼, 방화벽 규칙 위쪽으로, 거부 보다 밑에 있으면 적용안됨)
반응형
'코딩ㆍ개발 정보 > HTML 연습' 카테고리의 다른 글
[도커] docker에 추가적인 프로그램 설치 방법 (0) | 2024.08.20 |
---|---|
로그인 아웃/ 세션 기록 하는 방법 (0) | 2024.08.19 |
[sublime text] JSP UTF-8 를 기본값 파일 만드는 방법 (0) | 2024.08.16 |
[sublime text] <html lang="ko"> 를 기본값으로 적용하는 방법 (0) | 2024.08.16 |
[캐시 사용 안함] 엣지 브라우저 캐시 삭제 방법 (0) | 2024.08.07 |