# 設定主機2025 (Ubuntu24.04筆記)

### **切換成root角色**  


```bash
sudo su
```

<p class="callout info">有些vps預設會直接用root，就不用切換。我是習慣全用root去執行操作，主機只有自己會管理，有時遇到權限的問題真的蠻雷的 XD</p>

### **修改時區** 

```
dpkg-reconfigure tzdata
```

### **修改語系**

```
vi /etc/locale.gen
把 zh_TW.UTF-8 mark打開
locale-gen
```

### **更新程式及更改主機名稱，然後重啟主機**

```
apt update
apt dist-upgrade
vi /etc/hostname
reboot
```

### **重啟用，登入後再切到 root 角色**

```
sudo su
```

### **安裝伺服器**  


```bash
apt install nginx php-fpm php-gd php-mbstring php-gd php-xml php-mysql mysql-server mysql-client certbot python3-certbot-nginx
```

<p class="callout info">Drupal或WordPress裝完後可以再檢查看看有沒有漏掉哪個php程式，再補齊安裝即可</p>

<p class="callout warning">不要用apt-install php，這樣會安裝apache2</p>

### **設定MySQL**

#### 設定mysql密碼  


以root進入mysql

```
mysql -u root
```

#### 更改密碼

```
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'yourpassword'; exit;
```

<p class="callout info">yourpassword 記得改成你自己的密碼</p>

<p class="callout warning">如果你的資料庫有設定外連，那可能就要避免直接用root，不然就是務必把防火牆的限定做好</p>

#### 調整conf檔  


```
[client]
default-character-set = utf8mb4

[mysqld]
character-set-server = utf8mb4
max_connections = 600
innodb_read_io_threads = 24
innodb_write_io_threads = 24
expire_logs_days = 7
max_binlog_size = 1G
```

<p class="callout info">加入後後重啟 server，binlog\_size務必要設定，log檔可能會被你的空間佔滿</p>

#### 在 ~/.my.cnf 加入密碼

```
[client]
password = yourpassword
```

### MySQL基本的管理指令

#### 建立資料庫

```bash
mysqladmin -u root create site
```

#### 刪除資料庫

```bash
mysqladmin -u root drop site
```

#### 匯出資料庫

```
mysqldump -u root site > site.sql
```

#### 匯入資料庫

```
mysql -u root site < site.sql
```

<p class="callout info">學會這幾招基本上就差不多可以不用裝phpMyAdmin XD</p>

### **啟用及設定伺服器防火牆**  


```bash
ufw enable
ufw allow from xxx.xxx.xxx.xxx (填上自己連入的IP)
ufw allow 'Nginx HTTP'
ufw allow 'Nginx HTTPS'
```

### **加入不同版本的php來源**  


```
add-apt-repository ppa:ondrej/php
aptitude update
```

```bash
apt install php7.4-fpm php7.4-gd php7.4-mbstring php7.4-gd php7.4-xml php7.4-mysql 
apt install php5.6-fpm php5.6-gd php7.4-mbstring php5.6-gd php5.6-xml php5.6-mysql 
```

### 安裝Docker

```bash
sudo apt install -y ca-certificates curl gnupg lsb-release
```

```bash
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
```

```bash
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
```

```
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
```

#### 安裝Portainer

```
docker pull portainer/portainer-ce:latest
docker run -d -p 9000:9000 --restart always -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer-ce:latest
```

#### Nginx conf

```nginx
server {
    listen 80;
    server_name docker.yoursite.com.tw;

    location / {
        proxy_pass http://127.0.0.1:9000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

```

#### 安裝舊版本的Mysql

```yaml
version: '3.8'
services:
  mysql:
    image: mysql:5.7
    container_name: my_mysql57
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: yourpassword    # 請換成你自己的密碼
      TZ: Asia/Taipei
    ports:
      - "43306:3306"
    volumes:
      - ./mysql57_data:/var/lib/mysql

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: my_phpmyadmin
    restart: always
    ports:
      - "48081:80"
    environment:
      - PMA_ARBITRARY=1
      - PMA_HOST=mysql
      - PMA_USER=root
      - PMA_PASSWORD=yourpassword    # 要與上面一致
      - UPLOAD_LIMIT=128M    # 要與上面一致
    depends_on:
      - mysql
```

#### Nginx 設定檔( phpmyadmin ) (他會直接登入，使用完記得移掉)

```nginx
server {
    listen 80;
    server_name pma2025.yoursite.com.tw;

    client_max_body_size 128M;  # <<< 這行最重要，數字請依需求調整

    location / {
        proxy_pass http://127.0.0.1:48081;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

```

Drupal 6 修改 port

```php
$db_url = 'mysqli://root:yourpassword@127.0.0.1:43306/haccp';
$db_prefix = 'haccp_';
```