Odroid-H3 도커 설정 공유
안녕하세요.
칼퇴하는남자입니다.
Odroid-H3 구입 후 이런저런 삽질 끝에 이제 어느 정도 정리가 되었기에 정리해 놓은 설치 과정을 공유합니다.
다른분께도 도움이 되셨으면 좋겠습니다.
최대한 간략히 코드 위주로 작성하였으므로 서버포럼 또는 구글에서 해당 컨테이너에 대해 검색해 보신 후 진행하시는 것이 좋겠습니다.
(예를 들면 컨테이너 생성 후 설정 방법 등)
「환경」
하드웨어: Odroid-H3
가상화: ESXi 6.7
OS: Rocky linux 9.1
「OS 설치」
1. Rocky linux 9.1 minimal ISO를 다운로드 받은 후 최소 설치로 OS 설치
2. SSH 활성화
sudo vim /etc/ssh/sshd_config # sshd 설정에서 Port 번호 변경
Port 20480(또는 자신이 원하는 SSH 포트) # sshd 포트 변경
sudo semanage port -a -t ssh_port_t -p tcp 20480(자신이 설정한 포트 입력) # SELinux에 SSH 포트 추가
sudo semanage port -l | grep ssh # 포트 추가 확인
sudo firewall-cmd --permanent --add-port=20480/tcp # Firewalld에 SSH 포트 추가
sudo firewall-cmd --reload # 룰 적용
3. 기타 설정(하지 않아도 상관 없음)
vim .bashrc # .bashrc에 아래 내용 추가
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
alias ls='ls --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
fi
alias ll='ls -alvh --group-directories-first'
alias la='ls -Av --group-directories-first'
alias l='ls -CFv --group-directories-first'
alias lz='ls -alZh --group-directories-first'
export EDITOR="vim"
export TIME_STYLE=long-iso
HISTSIZE=1000
HISTFILESIZE=2000
「Docker 설치」
1. Docker repo 등록
sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf update # 에러는 무시해도 됨
2. Docker 패키지 설치
sudo dnf install -y docker-ce --allowerasing
docker --version # Docker 버전 확인
3. Docker 활성화
sudo systemctl enable docker #Docker 활성화
sudo systemctl start docker # Docker 실행
sudo systemctl status docker # Docker 상태 확인
sudo usermod -aG docker $USER # 사용자 계정을 docker 그룹에 추가
sudo dnf install docker-compose-plugin # Docker-compose 설치
「Docker에 사용자 정의 네트워크 설정」
docker network create --driver bridge --subnet 10.10.10.0/24 --gateway 10.10.10.1 uDN
「Docker용 디렉토리 생성」
mkdir $HOME/docker # 자신의 홈디렉토리에 Docker용 디렉토리 생성
「Portainer 컨테이너 생성」
1. Portainer용 디렉토리 생성
mkdir $HOME/docker/portainer
mkdir $HOME/docker/portainer/data
2. docker-compose 작성
vim docker-compose.yml # 아래 내용 입력
version: '3.8'
services:
portainer:
container_name: portainer
image: portainer/portainer-ce:latest
command: -H unix:///var/run/docker.sock
restart: always
privileged: true
networks:
default:
ipv4_address: 10.10.10.5
ports:
- 9000:9000
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- $HOME/docker/portainer/data:/data
networks:
default:
name: uDN
external: true
3. Portainer 실행
docker compose up -d portainer
# 이후 모든 Docker 컨테이너는 Portainer에서 생성
「GoDaddy DDNS 컨테이너 생성」
1. 개인도메인 사용을 위해 GoDaddy에서 개인도메인 구입
2. DDNS 설정을 위해 Portainer 로그인
3. Portainer에 Stack 생성(필자는 private_mgt로 Stack 생성)
4. 생성한 Stack의 Editor에 아래 내용 입력 후 Update the stack 버튼 클릭
# 자신이 필요로 하는 만큼 생성
version: '3.8'
services:
ddns_portainer:
container_name: ddns_portainer
image: linuxshots/godaddy-ddns:latest
restart: always
networks:
default:
ipv4_address: 10.10.10.222
environment:
- GD_NAME=portainer
- GD_DOMAIN=your domain
- GD_TTL=1200
- GD_KEY=your GoDaddy API key
- GD_SECRET=your GoDaddy API secret
ddns_pma:
container_name: ddns_pma
image: linuxshots/godaddy-ddns:latest
restart: always
networks:
default:
ipv4_address: 10.10.10.223
environment:
- GD_NAME=pma
- GD_DOMAIN=your domain
- GD_TTL=1200
- GD_KEY=your GoDaddy API key
- GD_SECRET=your GoDaddy API secret
ddns_cloud:
container_name: ddns_cloud
image: linuxshots/godaddy-ddns:latest
restart: always
networks:
default:
ipv4_address: 10.10.10.224
environment:
- GD_NAME=cloud
- GD_DOMAIN=your domain
- GD_TTL=1200
- GD_KEY=your GoDaddy API key
- GD_SECRET=your GoDaddy API secret
networks:
default:
name: uDN
external: true
「Maria DB 컨테이너 생성」
1. MariaDB용 디렉토리 생성
mkdir $HOME/docker/mariadb
mkdir $HOME/docker/mariadb/config
2. MariaDB ROOT PASSWORD 설정
vim $HOME/docker/mariadb/config/env # 아래 내용 입력
MYSQL_ROOT_PASSWORD="자신이 원하는 password"
3. Portainer에 Stack 생성(필자는 private_backend로 생성함)
4. 생성한 Stack의 Editor에 아래 내용 입력 후 Update the stack 버튼 클릭
version: '3.8'
services:
mariadb:
container_name: mariadb
image: lscr.io/linuxserver/mariadb:latest
restart: always
networks:
default:
ipv4_address: 10.10.10.100
ports:
- 30960:3306/tcp
volumes:
- /home/자신의 계정/docker/mariadb/config:/config
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Seoul
networks:
default:
name: uDN
external: true
「phpMyAdmin 컨테이너 생성」
1. phpMyAdmin용 디렉토리 생성
mkdir $HOME/docker/phpmyadmin
mkdir $HOME/docker/phpmyadmin/config
2. Portainer에 Stack 생성(필자는 private_frontend로 생성함)
3. 생성한 Stack의 Editor에 아래 내용 입력 후 Update the stack 버튼 클릭
version: '3.8'
services:
phpmyadmin:
container_name: phpmyadmin
image: lscr.io/linuxserver/phpmyadmin:latest
restart: always
networks:
default:
ipv4_address: 10.10.10.11
ports:
- 10280:80/tcp
volumes:
- /home/자신의 계정/docker/phpmyadmin/config:/config
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Seoul
- PMA_HOST=mariadb #(Docker의 mariadb 컨테이너 Name)
networks:
default:
name: uDN
external: true
「Nginx Proxy Manager(npm) 컨테이너 생성」
1. npm용 디렉토리 생성
mkdir $HOME/docker/npm
mkdir $HOME/docker/npm/config
2. 기존에 생성한 Stack(private_frontend)의 Editor에 아래 내용 입력 후 Update the stack 버튼 클릭
npm:
container_name: npm
image: jlesage/nginx-proxy-manager:latest
restart: always
networks:
default:
ipv4_address: 10.10.10.10
ports:
- 8080:8080/tcp
- 8181:8181/tcp
- 4443:4443/tcp
volumes:
- /home/자신의 계정/docker/npm/config:/config:rw
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Seoul
- DISABLE_IPV6=1
「Flame 컨테이너 생성」
1. Flame용 디렉토리 생성
mkdir $HOME/docker/flame
mkdir $HOME/docker/flame/data
2. 기존에 생성한 Stack(private_frontend)의 Editor에 아래 내용 입력 후 Update the stack 버튼 클릭
flame:
container_name: flame
image: pawelmalak/flame:latest
restart: always
networks:
default:
ipv4_address: 10.10.10.12
ports:
- 5005:5005/tcp
volumes:
- /home/자신의 계정/docker/flame/data:/app/data
environment:
- PASSWORD=NhcsdgsFhDf2z2uS # Flame에 사용할 비밀번호
3. Flame에 로그인 후 Custom CSS 설정(필요할 경우에만)
/* Font change */
body {
font-family: D2Coding, monospace, Roboto, sans-serif !important;
font-size: 16px !important;
}
/* Hide Application URLs */
.AppCard_AppCardDetails__tbAhY {
height: 50%;
}
.AppCard_AppCardDetails__tbAhY span {
display: none !important;
}
/* Settings button style */
.Home_SettingsButton__Qvn8C {
border-radius: 0.5rem !important;
background-color: #DFD9D6 !important;
}
/* Wide Application tiles */
.AppCard_AppCard__1V2_0 {
padding: 15px !important;
margin-bottom: 0 !important;
border-radius: 0.7rem !important;
}
/* Application tile hover color */
.AppCard_AppCard__1V2_0:hover {
background-color: rgba(0, 0, 0, 0.3) !important;
}
@supports (-webkit-backdrop-filter: none) or (backdrop-filter: none) {
.AppCard_AppCard__1V2_0:hover {
backdrop-filter: blur(15px);
background-color: rgba(0, 0, 0, 0.3) !important;
}
}
/* Background image */
body {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
height: 100%;
}
body:before {
content: "";
position: fixed;
overflow: hidden;
background-image: url("/upload/spacex-6SbFGnQTE8s-unsplash_resize");
background-size: cover;
z-index: -999;
height: 100%;
width: 100%;
transform: scale(1.1);
/* Change the following only: */
/* filter: blur(0.2rem); */
/* opacity: 0.6; */
}
/* Truncate Title and URL */
.AppCard_AppCardIcon__8ZZTq {
min-width: 35px;
}
.AppCard_AppCard__1V2_0 {
min-width: 0
}
.AppCard_AppCardDetails__tbAhY {
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
}
「Vaultwarden 컨테이너 생성」
1. Vaultwarden용 디렉토리 생성
mkdir $HOME/docker/vaultwarden
mkdir $HOME/docker/vaultwarden/data
2. 기존에 생성한 Stack(private_backend)의 Editor에 아래 내용 입력 후 Update the stack 버튼 클릭
vaultwarden:
container_name: vaultwarden
image: vaultwarden/server:latest
restart: always
networks:
default:
ipv4_address: 10.10.10.101
ports:
- 5080:80/tcp
- 3012:3012/tcp #웹소켓용 포트
volumes:
- /home/자신의 계정/docker/vaultwarden/data:/data
environment:
- TZ=Asia/Seoul
- WEBSOCKET_ENABLED=true
- SIGNUPS_ALLOWED=false #계정 생성 금지, 설정 완료 후 추가로 등록해야 함
- DOMAIN=https://your domain #설정 완료 후 추가로 등록해야 함, npm에 등록한 url
「FileRun 컨테이너 생성」
1. FileRun용 디렉토리 생성
mkdir $HOME/docker/filerun
mkdir $HOME/docker/filerun/data
mkdir $HOME/storage/public # 추가로 사용할 데이터 저장 볼륨
2. phpMyAdmin에 접속하여 FileRun용 DB 생성
3. 기존에 생성한 Stack(private_frontend)의 Editor에 아래 내용 입력 후 Update the stack 버튼 클릭
filerun:
container_name: filerun
image: filerun/filerun:latest
restart: always
networks:
default:
ipv4_address: 10.10.10.13
ports:
- 10180:80/tcp
volumes:
- /home/자신의 계정/docker/filerun/data:/var/www/html
- /home/자신의 계정/storage/public:/user-files
environment:
- APACHE_RUN_USER=자신의 계정
- APACHE_RUN_USER_ID=1000
- APACHE_RUN_GROUP=자신의 그룹 계정(일반적으로 계정과 동일함)
- APACHE_RUN_GROUP_ID=1000
4. FileRun에 접속하여 초기 설정 진행
데이터베이스 사용자: filerun # phpMyAdmin에서 생성한 FileRun용 사용자
데이터베이스 암호: fD9f4wD~~~5KZ9Xb # phpMyAdmin에서 생성한 사용자의 비밀번호
데이터베이스 이름: filerun
데이터베이스 호스트: mariadb # MariaDB 컨테이너 이름
데이터베이스 포트: 3306
「Wireguard 컨테이너 생성」
1. Wireguard용 디렉토리 생성
mkdir $HOME/docker/wireguard
mkdir $HOME/docker/wireguard/data
2. 기존에 생성한 Stack(private_backend)의 Editor에 아래 내용 입력 후 Update the stack 버튼 클릭
wireguard:
container_name: wireguard
image: weejewel/wg-easy:latest
restart: always
networks:
default:
ipv4_address: 10.10.10.102
ports:
- 51820:51820/udp
- 51821:51821/tcp
cap_add:
- NET_ADMIN
- SYS_MODULE
sysctls:
- net.ipv4.ip_forward=1
- net.ipv4.conf.all.src_valid_mark=1
volumes:
- /home/자신의 계정/docker/wireguard/data:/etc/wireguard
environment:
- WG_HOST=your domain #GoDaddy 및 npm에 등록한 url
- PASSWORD=bNR6nv~~~~9sn3rba # WebUI 접속용 비밀번호
- WG_PERSISTENT_KEEPALIVE=25
cmt alert