Fresh start with clean repository

This commit is contained in:
boilerrat 2025-03-16 14:06:25 -04:00
commit cee7e0f016
12 changed files with 858 additions and 0 deletions

43
.gitignore vendored Normal file
View File

@ -0,0 +1,43 @@
# Dependencies
node_modules/
/.pnp
.pnp.js
# Testing
/coverage
# Production
/build
/dist
# Misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
.env
# Logs
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Editor directories and files
.idea/
.vscode/
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
# Parcel
.cache/
.parcel-cache/
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache

121
LICENSE Normal file
View File

@ -0,0 +1,121 @@
Creative Commons Legal Code
CC0 1.0 Universal
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
HEREUNDER.
Statement of Purpose
The laws of most jurisdictions throughout the world automatically confer
exclusive Copyright and Related Rights (defined below) upon the creator
and subsequent owner(s) (each and all, an "owner") of an original work of
authorship and/or a database (each, a "Work").
Certain owners wish to permanently relinquish those rights to a Work for
the purpose of contributing to a commons of creative, cultural and
scientific works ("Commons") that the public can reliably and without fear
of later claims of infringement build upon, modify, incorporate in other
works, reuse and redistribute as freely as possible in any form whatsoever
and for any purposes, including without limitation commercial purposes.
These owners may contribute to the Commons to promote the ideal of a free
culture and the further production of creative, cultural and scientific
works, or to gain reputation or greater distribution for their Work in
part through the use and efforts of others.
For these and/or other purposes and motivations, and without any
expectation of additional consideration or compensation, the person
associating CC0 with a Work (the "Affirmer"), to the extent that he or she
is an owner of Copyright and Related Rights in the Work, voluntarily
elects to apply CC0 to the Work and publicly distribute the Work under its
terms, with knowledge of his or her Copyright and Related Rights in the
Work and the meaning and intended legal effect of CC0 on those rights.
1. Copyright and Related Rights. A Work made available under CC0 may be
protected by copyright and related or neighboring rights ("Copyright and
Related Rights"). Copyright and Related Rights include, but are not
limited to, the following:
i. the right to reproduce, adapt, distribute, perform, display,
communicate, and translate a Work;
ii. moral rights retained by the original author(s) and/or performer(s);
iii. publicity and privacy rights pertaining to a person's image or
likeness depicted in a Work;
iv. rights protecting against unfair competition in regards to a Work,
subject to the limitations in paragraph 4(a), below;
v. rights protecting the extraction, dissemination, use and reuse of data
in a Work;
vi. database rights (such as those arising under Directive 96/9/EC of the
European Parliament and of the Council of 11 March 1996 on the legal
protection of databases, and under any national implementation
thereof, including any amended or successor version of such
directive); and
vii. other similar, equivalent or corresponding rights throughout the
world based on applicable law or treaty, and any national
implementations thereof.
2. Waiver. To the greatest extent permitted by, but not in contravention
of, applicable law, Affirmer hereby overtly, fully, permanently,
irrevocably and unconditionally waives, abandons, and surrenders all of
Affirmer's Copyright and Related Rights and associated claims and causes
of action, whether now known or unknown (including existing as well as
future claims and causes of action), in the Work (i) in all territories
worldwide, (ii) for the maximum duration provided by applicable law or
treaty (including future time extensions), (iii) in any current or future
medium and for any number of copies, and (iv) for any purpose whatsoever,
including without limitation commercial, advertising or promotional
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
member of the public at large and to the detriment of Affirmer's heirs and
successors, fully intending that such Waiver shall not be subject to
revocation, rescission, cancellation, termination, or any other legal or
equitable action to disrupt the quiet enjoyment of the Work by the public
as contemplated by Affirmer's express Statement of Purpose.
3. Public License Fallback. Should any part of the Waiver for any reason
be judged legally invalid or ineffective under applicable law, then the
Waiver shall be preserved to the maximum extent permitted taking into
account Affirmer's express Statement of Purpose. In addition, to the
extent the Waiver is so judged Affirmer hereby grants to each affected
person a royalty-free, non transferable, non sublicensable, non exclusive,
irrevocable and unconditional license to exercise Affirmer's Copyright and
Related Rights in the Work (i) in all territories worldwide, (ii) for the
maximum duration provided by applicable law or treaty (including future
time extensions), (iii) in any current or future medium and for any number
of copies, and (iv) for any purpose whatsoever, including without
limitation commercial, advertising or promotional purposes (the
"License"). The License shall be deemed effective as of the date CC0 was
applied by Affirmer to the Work. Should any part of the License for any
reason be judged legally invalid or ineffective under applicable law, such
partial invalidity or ineffectiveness shall not invalidate the remainder
of the License, and in such case Affirmer hereby affirms that he or she
will not (i) exercise any of his or her remaining Copyright and Related
Rights in the Work or (ii) assert any associated claims and causes of
action with respect to the Work, in either case contrary to Affirmer's
express Statement of Purpose.
4. Limitations and Disclaimers.
a. No trademark or patent rights held by Affirmer are waived, abandoned,
surrendered, licensed or otherwise affected by this document.
b. Affirmer offers the Work as-is and makes no representations or
warranties of any kind concerning the Work, express, implied,
statutory or otherwise, including without limitation warranties of
title, merchantability, fitness for a particular purpose, non
infringement, or the absence of latent or other defects, accuracy, or
the present or absence of errors, whether or not discoverable, all to
the greatest extent permissible under applicable law.
c. Affirmer disclaims responsibility for clearing rights of other persons
that may apply to the Work or any use thereof, including without
limitation any person's Copyright and Related Rights in the Work.
Further, Affirmer disclaims responsibility for obtaining any necessary
consents, permissions or other rights required for any use of the
Work.
d. Affirmer understands and acknowledges that Creative Commons is not a
party to this document and has no duty or obligation with respect to
this CC0 or use of the Work.

77
README.md Normal file
View File

@ -0,0 +1,77 @@
# Web3 CV
A simple web page for my Web3 CV.
## Deployment
This website is deployed to:
- [boilerhaus.org](https://boilerhaus.org) - Primary domain on VPS
- [chriswylde.xyz](https://chriswylde.xyz) - Secondary domain on Vercel (manually deployed)
## Setup Instructions
### Initial Setup
1. Clone the repository:
```bash
git clone https://git.boilerhaus.org/boiler/Web3CV.git
cd Web3CV
```
2. Install dependencies:
```bash
npm install
```
3. Set up the VPS:
```bash
./setup-vps.sh
```
This script will:
- Check if Nginx and Certbot are installed on your VPS
- Create the necessary directories
- Configure Nginx for boilerhaus.org, cloud.boilerhaus.org, and git.boilerhaus.org
- Set up SSL certificates using Let's Encrypt
- Configure Nextcloud to use cloud.boilerhaus.org (if installed)
4. Migrate to Gitea:
```bash
./migrate-to-gitea.sh
```
This script will:
- Create a new repository on your Gitea instance
- Push your code to Gitea
### Development
1. Run the development server:
```bash
npx parcel index.html
```
2. Open [http://localhost:1234](http://localhost:1234) in your browser.
### Deployment
1. Deploy to VPS:
```bash
./deploy-all.sh
```
This script will:
- Build the site
- Deploy to your VPS
- Push changes to Gitea
2. Deploy only to VPS (same as above):
```bash
./deploy.sh
```
## Repository Management
This repository is hosted on a self-hosted Gitea instance at git.boilerhaus.org.
### Remote Setup
Your remote is configured as:
- `origin`: Your Gitea repository (https://git.boilerhaus.org/boiler/Web3CV.git)

49
boilerhaus.org.conf Normal file
View File

@ -0,0 +1,49 @@
server {
listen 80;
listen [::]:80;
server_name boilerhaus.org www.boilerhaus.org;
root /var/www/boilerhaus.org;
index index.html;
location / {
try_files $uri $uri/ =404;
}
# Managed by Certbot
# This section will be updated by Certbot automatically
}
server {
listen 80;
listen [::]:80;
server_name cloud.boilerhaus.org;
# Managed by Certbot
# This section will be updated by Certbot automatically
# Proxy to Nextcloud (will be active after SSL is set up)
location / {
return 503; # Temporary unavailable until SSL is configured
}
}
server {
listen 80;
listen [::]:80;
server_name git.boilerhaus.org;
# Proxy to Gitea
location / {
proxy_pass http://localhost:3000;
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;
}
# Managed by Certbot
# This section will be updated by Certbot automatically
}
# SSL configurations will be added by Certbot automatically

108
css/style.css Normal file
View File

@ -0,0 +1,108 @@
body {
background-color: #1d1d1d;
border: none;
color: #444;
font-family: "Inter",sans-serif;
font-size: 20px;
margin: 0;
padding: 0;
-webkit-font-smoothing: antialiased;
}
a:hover {
text-decoration: none;
}
.btn {
background: #333;
padding: 20px; /* Increase Button Height */
font-size: 1.2em; /* Increase button font size */
}
.btn:hover {
background-color: #567730;
}
.header-inner {
position: relative;
text-align: center;
}
.site-title {
font-size: 2.75em;
font-family: "Gloock",cursive; /* Updated to Gloock font */
font-style: normal;
font-weight: 400;
text-align: center;
text-shadow: 1px 1px 2px rgba(0,0,0,.25);
}
.site-title a {
color: #fff;
}
.site-title a:hover {
color: #567730;
}
.site-description {
color: #999;
font-size: 1.1em;
font-family: "Inter", sans-serif;
font-weight: 400;
line-height: 110%;
margin: 20px 0 0;
text-align: center;
text-shadow: 1px 1px 1px rgba(0,0,0,.25);
}
.image-border {
border: 10px solid #567730;
box-sizing: border-box;
}
.section-header {
color: #fff;
font-size: 2em;
font-family: "Gloock", cursive; /* Updated to Gloock font */
font-style: normal;
font-weight: 400;
text-align: center;
margin-top: .5em;
margin-bottom: .5em;
border: 1px solid #fff; /* Add a thin white border */
padding: 10px; /* Add some padding */
box-sizing: border-box; /* Include border and padding in the element's total width and height */
}
.figure img {
height: 400px; /* Set a maximum height for the images */
max-width: 100%;
object-fit: cover; /* Resize the images to cover the entire area while maintaining the aspect ratio */
}
.figure figcaption {
text-align: center; /* Center the caption */
color: #fff; /* Set the text color to white */
font-family: "Inter",sans-serif; /* Match the font with the rest of the webpage */
font-size: 1em; /* Set the font size */
}
/* Media query for screens smaller than 600px */
@media (max-width: 600px) {
body {
font-size: 18px;
}
.btn {
padding: 15px;
font-size: 1em;
}
}
/* Media query for screens smaller than 400px */
@media (max-width: 400px) {
body {
font-size: 16px;
}
.btn {
padding: 10px;
font-size: 0.8em;
}
}

19
deploy-all.sh Executable file
View File

@ -0,0 +1,19 @@
#!/bin/bash
# This script deploys your website to your VPS
# Build the site
echo "Building the site..."
npx parcel build index.html
# Deploy to VPS
echo "Deploying to VPS..."
rsync -avz --delete dist/ root@boilerhaus.org:/var/www/boilerhaus.org/
# Push changes to Gitea
echo "Pushing changes to Gitea..."
git add .
git commit -m "Update website content" || echo "No changes to commit"
git push origin main
echo "Deployment complete!"

19
deploy.sh Executable file
View File

@ -0,0 +1,19 @@
#!/bin/bash
# This script deploys your website to your VPS
# Build the site
echo "Building the site..."
npx parcel build index.html
# Deploy to VPS
echo "Deploying to VPS..."
rsync -avz --delete dist/ root@boilerhaus.org:/var/www/boilerhaus.org/
# Push changes to Gitea
echo "Pushing changes to Gitea..."
git add .
git commit -m "Update website content" || echo "No changes to commit"
git push origin main
echo "Deployment complete!"

25
fix-git-subdomain.sh Executable file
View File

@ -0,0 +1,25 @@
#!/bin/bash
# This script fixes the git.boilerhaus.org subdomain configuration
# Check if we can connect to the VPS
echo "Testing connection to VPS..."
if ! ssh root@66.179.188.130 "echo 'Connection successful'"; then
echo "Failed to connect to VPS. Please check your SSH configuration."
exit 1
fi
# Upload the updated Nginx configuration
echo "Uploading updated Nginx configuration..."
scp boilerhaus.org.conf root@66.179.188.130:/etc/nginx/sites-available/boilerhaus.org
# Add git.boilerhaus.org to the SSL certificate
echo "Adding git.boilerhaus.org to the SSL certificate..."
ssh root@66.179.188.130 "certbot --nginx -d git.boilerhaus.org"
# Restart Nginx
echo "Restarting Nginx..."
ssh root@66.179.188.130 "systemctl restart nginx"
echo "Git subdomain fix complete!"
echo "You should now be able to access git.boilerhaus.org"

178
index.html Normal file
View File

@ -0,0 +1,178 @@
<! DOCTYPE html>
<html>
<head>
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.4.1/css/bootstrap.min.css" rel="stylesheet" />
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/css/all.min.css" rel="stylesheet" />
<link href="css/style.css" rel="stylesheet" /> <!-- Link to your custom CSS file -->
<script src="https://kit.fontawesome.com/56ab309fdd.js" crossorigin="anonymous"></script>
<link rel="icon" href="https://i.imgur.com/Clv3Y1dt.png" type="image/png">
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Gloock&display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Handjet&family=Inter&display=swap" rel="stylesheet">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<div class="header-inner section-inner my-5">
<h1 class="site-title">
<a href="https://www.chriswylde.xyz/" rel="home">
<img src="https://en.gravatar.com/userimage/28803791/eb0d590383693b2cbaefb2379c9afe7a.jpeg?size=256" class="rounded-circle mx-auto d-block mb-3 image-border" />
Boiler(Chris)
</a>
</h1>
<p class="site-description">Web3 Futurist - DAO Design, Governance and Operations</p>
</div>
<div class="container">
<div class="row mb-4">
<a class="btn btn-dark col-12 py-3" href="https://rxresu.me/boilerrat/victorious-present-lungfish" target="_blank" role="button">
<i class="fa-solid fa-calendar-plus"></i> Professional Resume
</a>
</div>
<div class="row mb-4">
<a class="btn btn-dark col-12 py-3" href="https://calendly.com/boiler-chris/call-with-boilerrat" target="_blank" role="button">
<i class="fa-solid fa-calendar-plus"></i> Book Time - Calendly
</a>
</div>
<div class="row mb-4">
<a class="btn btn-dark col-12 py-3" href="https://app.ens.domains/boilerhaus.eth" target="_blank" role="button">
<i class="fa-brands fa-ethereum"></i> ENS - boilerhaus.eth
</a>
</div>
<div class="row mb-4">
<a class="btn btn-dark col-12 py-3" href="https://etherscan.io/address/0x6FeD46ed75C1165b6bf5bA21f7F507702A2691cB" target="_blank" role="button">
<i class="fa-solid fa-chart-simple"></i> Etherscan
</a>
</div>
<div class="row mb-4">
<a class="btn btn-dark col-12 py-3" href="https://www.metokens.com/profile/0x6FeD46ed75C1165b6bf5bA21f7F507702A2691cB/" target="_blank" role="button">
<i class="fa-solid fa-coins"></i> meToken
</a>
</div>
<div class="row mb-4">
<a class="btn btn-dark col-12 py-3" href="https://quest.philand.xyz/account/0x6FeD46ed75C1165b6bf5bA21f7F507702A2691cB" target="_blank" role="button">
<i class="fa-solid fa-cube"></i> PhiLand
</a>
</div>
<div class="row mb-4">
<div class="col-12">
<h2 class="section-header">Social Media and Contacts</h2>
</div>
</div>
<div class="row mb-4">
<a class="btn btn-dark col-12 py-3" href="https://twitter.com/boilerrat" target="_blank" role="button">
<i class="fa-brands fa-twitter"></i> Twitter
</a>
</div>
<div class="row mb-4">
<a class="btn btn-dark col-12 py-3" href="https://warpcast.com/boiler" target="_blank" role="button">
<i class="fa-solid fa-archway"></i> Farcaster
</a>
</div>
<div class="row mb-4">
<a class="btn btn-dark col-12 py-3" href="https://lenster.xyz/u/boilerrat" target="_blank" role="button">
<i class="fa-solid fa-binoculars"></i> Lens
</a>
</div>
<div class="row mb-4">
<a class="btn btn-dark col-12 py-3" href="https://mastodon.world/@boilerrat" target="_blank" role="button">
<i class="fa-brands fa-mastodon"></i> Mastadon
</a>
</div>
<div class="row mb-4">
<a class="btn btn-dark col-12 py-3" href="https://github.com/boilerrat" target="_blank" role="button">
<i class="fa-brands fa-github"></i> Github
</a>
</div>
<div class="row mb-4">
<a class="btn btn-dark col-12 py-3" href="https://www.linkedin.com/in/christopherwylde/" target="_blank" role="button">
<i class="fa-brands fa-linkedin"></i> Linkedin
</a>
</div>
<div class="row mb-4">
<a class="btn btn-dark col-12 py-3" href="https://t.me/boilerrat" target="_blank" role="button">
<i class="fa-brands fa-telegram"></i> Telegram
</a>
</div>
<div class="row mb-4">
<a class="btn btn-dark col-12 py-3" href="https://discordapp.com/users/boiler_chris" target="_blank" role="button">
<i class="fa-brands fa-discord"></i> Discord
</a>
</div>
<div class="row mb-4">
<a class="btn btn-dark col-12 py-3" href="mailto:128boilerrat@gmail.com" target="_blank" role="button">
<i class="fa-solid fa-envelope"></i> Email
</a>
</div>
<div class="row mb-4">
<div class="col-12">
<h2 class="section-header">DAO Memberships</h2>
</div>
</div>
<div class="row mb-4">
<a class="btn btn-dark col-12 py-3" href="https://admin.daohaus.fun/#/molochv3/0x1/0x54e1826d462570a06a6bc44a78fdfbf0568aa2f3" target="_blank" role="button">
<i class="fa-solid fa-people-roof"></i> Boiler Family DAO
</a>
</div>
<div class="row mb-4">
<a class="btn btn-dark col-12 py-3" href="https://www.daomasons.com/" target="_blank" role="button">
<i class="fa fa-chess-rook"></i> DAO Masons - Core Team, DAO Design and Operations
</a>
</div>
<div class="row mb-4">
<a class="btn btn-dark col-12 py-3" href="https://publichaus.club/" target="_blank" role="button">
<i class="fa-brands fa-fort-awesome"></i> Public HAUS - Champion (Delegate)
</a>
</div>
<div class="row mb-4">
<a class="btn btn-dark col-12 py-3" href="https://www.youtube.com/channel/UC2UTfuf0xkIrLcmdnd96bGA" target="_blank" role="button">
<i class="fa-solid fa-house"></i> DAOhaus - Warcamp (Core Contributor)
</a>
</div>
<div class="row mb-4">
<a class="btn btn-dark col-12 py-3" href="https://publicnouns.wtf/" target="_blank" role="button">
<i class="fa-solid fa-glasses"></i> Public Nouns - NFT Holder and Contributor
</a>
</div>
<div class="row mb-4">
<a class="btn btn-dark col-12 py-3" href="https://www.metacartel.org/" target="_blank" role="button">
<i class="fa-solid fa-pepper-hot"></i> Metacartel - Member and Contributor
</a>
</div>
<div class="row mb-4">
<div class="col-12">
<h2 class="section-header">Personal Profile Pictures</h2>
</div>
</div>
<div class="container">
<div class="row">
<div class="col-lg-6 col-sm-12 mb-4">
<figure class="figure">
<img src="https://i.imgur.com/Clv3Y1d.png" class="img-fluid rounded mx-auto d-block" alt="Public Noun 237">
<figcaption class="figure-caption text-center"><a href="https://etherscan.io/nft/0x93ecac71499147627dfec6d0e494d50fcfff10ee/237">Etherscan: Public Noun 237</a></figcaption>
</figure>
</div>
<div class="col-lg-6 col-sm-12 mb-4">
<figure class="figure">
<img src="https://i.imgur.com/qvJL6Rd.png" class="img-fluid rounded mx-auto d-block" alt="Public Noun 111">
<figcaption class="figure-caption text-center"><a href="">Etherscan: Public Noun 111</a></figcaption>
</figure>
</div>
</div>
<div class="row">
<div class="col-lg-6 col-sm-12 mb-4">
<figure class="figure">
<img src="https://i.imgur.com/BRXIjWr.png" class="img-fluid rounded mx-auto d-block" alt="Public Noun 65">
<figcaption class="figure-caption text-center"><a href="https://etherscan.io/nft/0x93ecac71499147627dfec6d0e494d50fcfff10ee/65">Etherscan: Public Noun 65</a></figcaption>
</figure>
</div>
<div class="col-lg-6 col-sm-12 mb-4">
<figure class="figure">
<img src="https://i.imgur.com/adQSaCJ.png" class="img-fluid rounded mx-auto d-block" alt="Boiler's Jerry">
<figcaption class="figure-caption text-center"><a href="https://etherscan.io/nft/0x42c4a46bd0f9c642e852a848a5b730b6e3086ccf/32">Etherscan: Boiler's Jerry</a></figcaption>
</figure>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.0/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/fontawesome-iconpicker/3.2.0/js/fontawesome-iconpicker.min.js"></script>
</body>
</html>

52
migrate-to-gitea.sh Executable file
View File

@ -0,0 +1,52 @@
#!/bin/bash
# This script helps migrate your repository to your self-hosted Gitea
# First, check if we can connect to the Gitea server
echo "Testing connection to Gitea server..."
if ! curl -s https://git.boilerhaus.org > /dev/null; then
echo "Failed to connect to Gitea server. Please check your network connection."
exit 1
fi
# Create a new repository on Gitea using the API
echo "Creating a new repository on Gitea..."
# You'll need to generate an API token from your Gitea instance
# Generate one at https://git.boilerhaus.org/user/settings/applications
read -p "Enter your Gitea API token: " API_TOKEN
if [ -z "$API_TOKEN" ]; then
echo "API token is required. Please generate one at https://git.boilerhaus.org/user/settings/applications"
exit 1
fi
curl -X POST "https://git.boilerhaus.org/api/v1/user/repos" \
-H "accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: token $API_TOKEN" \
-d "{\"name\":\"Web3CV\",\"description\":\"My Web3 CV website\",\"private\":false,\"auto_init\":false}"
# Wait a moment for the repository to be created
sleep 2
# Reset remotes
echo "Resetting remotes..."
git remote remove origin 2>/dev/null || true
git remote remove github 2>/dev/null || true
git remote remove gitea 2>/dev/null || true
# Add Gitea as the only remote
echo "Adding Gitea as the remote..."
git remote add origin https://git.boilerhaus.org/boiler/Web3CV.git
# Verify the remote was added
echo "Verifying remote..."
git remote -v
# Push all branches and tags to Gitea
echo "Pushing to Gitea..."
git push -u origin main
git push --tags origin
echo "Migration to Gitea complete!"
echo "Your repository is now available at: https://git.boilerhaus.org/boiler/Web3CV"

60
push-in-chunks.sh Executable file
View File

@ -0,0 +1,60 @@
#!/bin/bash
# This script pushes your repository in smaller chunks to avoid HTTP 413 errors
# Set the remote and branch
REMOTE="origin"
BRANCH="main"
# Get the list of commits in reverse order (oldest first)
COMMITS=$(git rev-list --reverse HEAD)
# Initialize variables
LAST_PUSHED=""
CHUNK_SIZE=10
TOTAL_COMMITS=$(echo "$COMMITS" | wc -l)
CURRENT=0
echo "Total commits to push: $TOTAL_COMMITS"
# Process commits in chunks
for COMMIT in $COMMITS; do
CURRENT=$((CURRENT + 1))
# If this is the first commit or we've reached the chunk size
if [ -z "$LAST_PUSHED" ] || [ $((CURRENT % CHUNK_SIZE)) -eq 0 ] || [ $CURRENT -eq $TOTAL_COMMITS ]; then
echo "Pushing commit $CURRENT of $TOTAL_COMMITS: $COMMIT"
if [ -z "$LAST_PUSHED" ]; then
# For the first commit, create a new branch at this commit and push it
git checkout -b temp_branch $COMMIT
git push -f $REMOTE temp_branch:$BRANCH
LAST_PUSHED=$COMMIT
git checkout $BRANCH
git branch -D temp_branch
else
# For subsequent chunks, push the range from last pushed to current
git checkout -b temp_branch $COMMIT
git push -f $REMOTE temp_branch:$BRANCH
LAST_PUSHED=$COMMIT
git checkout $BRANCH
git branch -D temp_branch
fi
# Check if the push was successful
if [ $? -ne 0 ]; then
echo "Error pushing commit $COMMIT. Exiting."
exit 1
fi
echo "Successfully pushed up to commit $CURRENT of $TOTAL_COMMITS"
sleep 2 # Give the server a short break
fi
done
echo "All commits pushed successfully!"
git push -f $REMOTE $BRANCH
# Return to the original branch
git checkout $BRANCH
echo "Done! Your repository should now be fully pushed to $REMOTE/$BRANCH"

107
setup-vps.sh Executable file
View File

@ -0,0 +1,107 @@
#!/bin/bash
# This script helps set up your VPS for hosting your website and Nextcloud
# Check if we can connect to the VPS
echo "Testing connection to VPS..."
if ! ssh root@66.179.188.130 "echo 'Connection successful'"; then
echo "Failed to connect to VPS. Please check your SSH configuration."
exit 1
fi
# Check if Nginx is installed
echo "Checking if Nginx is installed..."
if ! ssh root@66.179.188.130 "which nginx > /dev/null"; then
echo "Nginx is not installed. Installing..."
ssh root@66.179.188.130 "apt update && apt install -y nginx"
else
echo "Nginx is already installed."
fi
# Check if Certbot is installed
echo "Checking if Certbot is installed..."
if ! ssh root@66.179.188.130 "which certbot > /dev/null"; then
echo "Certbot is not installed. Installing..."
ssh root@66.179.188.130 "apt update && apt install -y certbot python3-certbot-nginx"
else
echo "Certbot is already installed."
fi
# Create directory for the website
echo "Creating directory for the website..."
ssh root@66.179.188.130 "mkdir -p /var/www/boilerhaus.org"
# Create a temporary Nginx configuration without SSL
echo "Creating temporary Nginx configuration..."
cat > temp-boilerhaus.org.conf << EOF
server {
listen 80;
listen [::]:80;
server_name boilerhaus.org www.boilerhaus.org cloud.boilerhaus.org git.boilerhaus.org;
root /var/www/boilerhaus.org;
index index.html;
location / {
try_files \$uri \$uri/ =404;
}
}
EOF
# Upload temporary Nginx configuration
echo "Uploading temporary Nginx configuration..."
scp temp-boilerhaus.org.conf root@66.179.188.130:/etc/nginx/sites-available/boilerhaus.org
# Enable the site
echo "Enabling the site..."
ssh root@66.179.188.130 "ln -sf /etc/nginx/sites-available/boilerhaus.org /etc/nginx/sites-enabled/boilerhaus.org"
# Restart Nginx with temporary configuration
echo "Restarting Nginx with temporary configuration..."
ssh root@66.179.188.130 "systemctl restart nginx"
# Check for existing Nextcloud configuration
echo "Checking for existing Nextcloud configuration..."
if ssh root@66.179.188.130 "[ -d /var/www/nextcloud ]"; then
echo "Nextcloud directory found. Assuming Nextcloud is already installed."
# Ask if user wants to move Nextcloud to cloud subdomain
read -p "Do you want to move Nextcloud to cloud.boilerhaus.org? (y/n): " move_nextcloud
if [[ $move_nextcloud == "y" ]]; then
echo "Updating Nextcloud configuration..."
ssh root@66.179.188.130 "sed -i 's/\"trusted_domains\".*$/\"trusted_domains\" => [\"cloud.boilerhaus.org\"],/' /var/www/nextcloud/config/config.php"
fi
else
echo "Nextcloud directory not found. Please install Nextcloud manually after setting up the domains."
fi
# Check for Gitea port
echo "Checking if Gitea is running..."
if ssh root@66.179.188.130 "netstat -tuln | grep -q ':3000'"; then
echo "Gitea appears to be running on port 3000."
else
echo "Warning: Gitea doesn't seem to be running on the expected port (3000)."
echo "Please make sure Gitea is installed and running before proceeding."
read -p "Continue anyway? (y/n): " continue_anyway
if [[ $continue_anyway != "y" ]]; then
echo "Setup aborted. Please install and configure Gitea first."
exit 1
fi
fi
# Set up SSL certificates
echo "Setting up SSL certificates..."
ssh root@66.179.188.130 "certbot --nginx -d boilerhaus.org -d www.boilerhaus.org -d cloud.boilerhaus.org -d git.boilerhaus.org"
# Now upload the final configuration with SSL
echo "Uploading final Nginx configuration with SSL..."
scp boilerhaus.org.conf root@66.179.188.130:/etc/nginx/sites-available/boilerhaus.org
# Restart Nginx with final configuration
echo "Restarting Nginx with final configuration..."
ssh root@66.179.188.130 "systemctl restart nginx"
# Clean up temporary file
rm temp-boilerhaus.org.conf
echo "VPS setup complete!"